电子邮件客户端如何处理来自POP服务器的邮件



当编写连接通过套接字连接到POP3协议时,我可以使用LIST命令来获取电子邮件列表。假设我执行LIST命令,它将在列表中返回3700封邮件。我把整个回复读进了缓冲器。现在,我想在我的申请表上逐一列出这些邮件。

LIST
1 1472
...
3696 3224
3697 5998
3698 1970
3699 1425
3700 129345
.
我有两个想法。首先,我可以逐行解析响应并获得消息的消息号。对于每一行,我得到消息号,比如#3700,我做一个TOP 3700 10。这将读取10行邮件头。起初,我认为这将是很好的,因为我不需要下载整个邮件的主题,名称,地址和电子邮件的一些简短内容;我可以避免交通堵塞。但问题是并不是所有的邮件都只有10行标题。有些邮件的标题很长,而有些邮件的标题很短。很难确定要读多少行。不仅如此,由于电子邮件没有完全下载,当用户想要阅读完整的邮件时,我必须发送另一个RETR命令来获取整个电子邮件。然后假设有另一个到POP帐户的连接并删除了消息#3700。我的应用程序仍然通过这个"非唯一"消息id识别电子邮件。当我的应用程序想要下载电子邮件并发送RETR 3700时,它将响应-ERR Server Unavailable. 21

我的第二个想法是使用RETR 3700。这将读取整个邮件,只是为了在应用程序中列出一些信息。我认为这有点愚蠢,因为如果邮箱有很多邮件,我将把整个邮箱检索到应用程序的内存中!

电子邮件客户端处理来自POP服务器的邮件的常见/聪明的方法是什么?

PS:我没有使用JavaMail,因为我的目的是学习更多关于POP协议是如何工作的,以及用来与协议一起工作的实现

TOP命令的第二个参数是要下载的消息行的非负数- 标题行不包括

您可以使用TOP命令以0作为行数(TOP message_number 0)来下载消息头。

最新更新