我们已经运行了一个自定义的pop3服务器多年没有问题。 但现在有些客户正在尝试使用iPhone,而且有一些神秘的不兼容性。 对于超过一定大小的电子邮件(对于我们使用大约32K的testing),iPhone只使用TOP命令检索标题和前40行。 它会显示这些行,“这条消息只是部分下载”,还有一个button“下载剩余”。
与我们的服务器,它永远不会检索完整的消息。 点击“下载剩余”只是发送一个STAT命令。 运行Dovecot pop3服务器的testing服务器会按照预期发送RETR命令,并显示完整的消息。 我也用一个testingAOL帐户监视协议交换,按预期工作。
我显然不期望任何人debugging我们的pop3服务器代码,但是有没有人知道iPhone可能会看到什么样的行为 – 从不发送RETR ? 我比较了协议交换,可以看到没有实际的区别和我们的工作服务器。 我已经检查过多次消息格式(标题行+空行+消息体+单行期间终止)。
以下是我们服务器的协议交换:
+OK MultiBase POP3 Server Ready USER [email protected] +OK Name is a valid mailbox PASS a +OK Mailbox locked and ready STAT +OK 1 34572 UIDL +OK 1 20110607123720000006 . LIST +OK 1 messages (34572) 1 34572 . TOP 1 40 +OK message top follows [--message headers + 40 lines--] . [--Download remaining button hit--] STAT +OK 1 34572
这是Dovecot服务器的协议交换:
+OK Dovecot ready. USER stuff +OK PASS a +OK Logged in. STAT +OK 1 34732 UIDL +OK 1 000000014dee8328 . LIST +OK 1 messages: 1 34732 . TOP 1 40 +OK [--message headers + 40 lines--] . [--Download remaining button hit--] STAT +OK 1 34732 RETR 1 +OK 34732 octets [--full message--] .
iPhone似乎有一个不closures连接的习惯,所以这就是为什么在这些交stream中没有QUIT命令。
任何build议或线索非常感谢。
如果iPhone对Dovecot服务器正常工作,那么我会怀疑问题是在iPhone的一面。 我build议在服务器上放一个数据包捕获程序,开始捕获,并观察iPhone和服务器之间的通信以寻找线索。 可能服务器正在从iPhone收到RETR命令之前终止TCP会话。 从服务器或其他一些寻找RST。