OpenPop.NET:Pop3Client:如何只获取新的电子邮件

时间:2014-11-03 09:54:46

标签: c# email client pop3

有没有办法只从邮件服务器获取新的电子邮件(例如,当你在本地存储提取的电子邮件时)而不是取出所有这些电子邮件?

我想我可以用5个字符串来获取电子邮件,比较一下,例如,最后一封电子邮件(或其来自Pop3Client.GetMessageUid()的Uid)的哈希值与所提取的电子邮件的哈希值,但我不确定是否这是最好,最可靠的方式。我认为这会浪费带宽或用多个请求轰炸服务器。

协议是否允许指定一个时间点(使用日期,最后一次电子邮件哈希或其他),之后它应该返回电子邮件?

目前,我正在使用OpenPop.NET OpenPop.Pop3.Pop3Client

修改

我在这里找到了一个例子: http://hpop.sourceforge.net/exampleDownloadUnread.php 虽然它不能100%满足我的需求(因为它获得了可能太​​多的所有UID),但这是一个很好的起点。

基本上,我想要做的就是这个IMAP样本通过比较UID做了什么:

http://www.limilabs.com/blog/get-new-emails-using-imap

编辑2

我发现了类似的问题,但它也提出了检索所有UID的方法:

How to retrieve only new emails using POP3 protocol

1 个答案:

答案 0 :(得分:2)

无论你做什么,你都需要下载所有的UID,因为你需要将它们与你已经下载的(在某种UID日志中)进行比较,以及拥有新的UID。消息,以便您可以记录它们以便在下次连接时进行比较。

但是,应该注意的是,并非所有POP3服务器都支持UIDL命令(毕竟它是扩展名),因此如果您的代码要用于各种POP3服务器,则必须处理接着就,随即。你如何处理它取决于你,但我相信我过去的方法是md5sum集合标题(尽管不是全部,因为一些POP3服务器可能会添加或修改标题,如X-Status或Status或一些自定义标题)。你可以通过哈希收到的标题来逃脱。