POP3协议是否允许您指定要下载的电子邮件子集?

时间:2009-03-27 21:56:07

标签: email pop3

我正在写一个POP3邮件客户端。我想将消息留在服务器上,但我不想每次重新连接时都重新下载所有消息。

如果我今天下载所有邮件,并且明天重新连接,协议是否支持仅下载过去24小时或某个连续ID的邮件?或者我是否必须重新下载所有邮件?

我知道Unique IDentification Listing功能,但根据http://www.faqs.org/rfcs/rfc1939.html,它在原始规范中不受支持。大多数邮件服务器是否支持此功能?

是的,我的客户端也支持IMAP,但这个问题专门针对POP服务器。

4 个答案:

答案 0 :(得分:3)

您是否考虑过使用IMAP?

答案 1 :(得分:1)

我已经完成了。

您必须重读所有标题,但您可以决定下载哪些邮件。

我不记得标题中的任何内容会给你一个万无一失的时间戳。如果不记录你已经看过的内容,我不相信你的解决方案是可能的。

(在我的情况下,我并不关心 - 我只是在寻找标题中具有某些识别功能的消息 - 这些消息被下载,处理和杀死,其他一切都没有被触及。)

我也想知道你是否误解了协议。仅仅因为您下载邮件并不意味着它已从服务器中删除。如果您提供明确的命令来终止该消息,则仅从服务器中删除它。 (当一条消息包含很多附件时,系统会在您正确注销之前超时,因此您的kill命令被丢弃,您将被驱逐到墙上!)(这是设计中的疏忽。原来的逻辑是附加一个文件超过100k,或尽可能多的文件,其总数低于100k。另一个任务禁止并生成数千个文件,每个约100字节。虽然这是一个完全合法的,虽然极端,电子邮件没有什么能够杀死它!)

因此,如果我正在编写邮件客户端,我只需下载本地没有的任何内容。如果它应该保留在服务器上,那很好,只是不要给kill命令。

答案 2 :(得分:0)

我所看到的过去处理的方式是逐个客户端。例如,如果我使用Scribe在一台机器上获取电子邮件而不删除,那么移动到另一台机器,所有电子邮件都会再次下载,尽管我之前已经看过它们。在内部,我想客户端有一个表,用于存储以前是否已经下载过电子邮件。

我所知道的协议中没有任何内容可以实现这一点。

答案 3 :(得分:0)

排序-的。您可以下载单个邮件,但不能在远程服务器上存储状态。

请参阅http://www.faqs.org/rfcs/rfc1939.html处的RETR命令。