多年来,我们一直运行自定义 pop3 服务器,没有出现任何问题。但现在有些客户尝试使用 iPhone,却出现了一些神秘的不兼容问题。对于超过一定大小的电子邮件(我们测试时使用大约 32K),iPhone 只会使用该TOP
命令检索标题和前 40 行。它会显示这些行,“此邮件仅部分下载”,以及一个“下载剩余内容”按钮。
使用我们的服务器时,它永远不会检索完整的消息。点击“下载剩余”只会发送一个STAT
命令。使用运行 Dovecot pop3 服务器的测试服务器,它RETR
会按预期发送命令并显示完整的消息。我还使用测试 AOL 帐户监控了协议交换,该帐户按预期工作。
我显然不希望有人调试我们的 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 似乎有不很快关闭连接的习惯,所以QUIT
这些交换中没有命令。
如有任何建议或线索,我将不胜感激。
答案1
如果 iPhone 在 Dovecot 服务器上正常运行,那么我怀疑问题出在 iPhone 方面。我建议在服务器上安装一个数据包捕获程序,开始捕获,并观察 iPhone 和服务器之间的通信以寻找线索。也许服务器在从 iPhone 收到 RETR 命令之前终止了 TCP 会话。寻找来自服务器的 RST 或其他异常。