我正在编写一个 POP3 邮件客户端。我想将消息留在服务器上,但我不想每次重新连接时都必须重新下载所有消息。
如果我今天下载所有消息,明天重新连接,该协议是否支持仅下载过去 24 小时内的消息或某个顺序 ID 的消息?还是我必须重新下载所有消息?
我知道唯一标识列表功能,但根据http://www.faqs.org/rfcs/rfc1939.html,原始规范不支持它。大多数邮件服务器是否支持此功能?
是的,我的客户端也支持 IMAP,但这个问题是专门针对 POP 服务器的。
我正在编写一个 POP3 邮件客户端。我想将消息留在服务器上,但我不想每次重新连接时都必须重新下载所有消息。
如果我今天下载所有消息,明天重新连接,该协议是否支持仅下载过去 24 小时内的消息或某个顺序 ID 的消息?还是我必须重新下载所有消息?
我知道唯一标识列表功能,但根据http://www.faqs.org/rfcs/rfc1939.html,原始规范不支持它。大多数邮件服务器是否支持此功能?
是的,我的客户端也支持 IMAP,但这个问题是专门针对 POP 服务器的。
您是否考虑过使用 IMAP?
我已经做到了。
您必须重新阅读所有标题,但您可以决定要下载哪些邮件。
但是,我不记得标题中的任何内容会给您一个万无一失的时间戳。如果不记录您已经看到的内容,我认为您的解决方案是不可能的。
(就我而言,我不在乎——我只是在标题中寻找具有某些识别特征的消息——这些消息被下载、处理和杀死,其他一切都没有受到影响。)
我也想知道你是否误解了协议。仅仅因为您下载了一条消息并不意味着它已从服务器中删除。如果您给出明确的命令来终止消息,它只会从服务器中删除。(当一条消息包含如此多的附件以致在您正确注销之前系统超时并因此您的 kill 命令被丢弃时,您将被逼上墙!)(这是设计中的疏忽。原始逻辑是附加一个超过 100k 的文件,或尽可能多的文件,其总数低于 100k。另一个任务发出并生成数千个文件,每个文件大约 100 字节。虽然它是一个完全合法的文件,尽管极端,但电子邮件却无法杀死它!)
因此,如果我正在编写一个邮件客户端,我会简单地下载我在本地没有的任何东西。如果它应该保留在服务器上,很好,只是不要发出 kill 命令。
我所看到的过去处理的方式是逐个客户的。例如,如果我使用 Scribe 在一台机器上获取电子邮件而不删除,然后移动到另一台机器,尽管我以前见过它们,但所有电子邮件都会再次下载。在内部,我想客户端有一个表来存储以前是否下载过电子邮件。
我知道协议中没有任何内容允许这样做。
有点。您可以下载单个消息,但不能将状态存储在远程服务器上。
请参阅http://www.faqs.org/rfcs/rfc1939.html上的 RETR 命令。