【问题标题】:OpenPop.NET : Pop3Client : How to get only the new emailsOpenPop.NET : Pop3Client : 如何只获取新邮件
【发布时间】:2014-11-04 23:01:58
【问题描述】:

有没有办法只从邮件服务器获取新邮件(例如,当您将获取的邮件存储在本地时)而不是全部获取?

我想我可以以 5 封邮件的形式获取电子邮件,然后将最后一封电子邮件的哈希值(或其 Uid 来自 Pop3Client.GetMessageUid())与获取的电子邮件的哈希值进行比较,但我不确定这是否是最好和最可靠的方法。我认为这将浪费带宽或用多个请求轰炸服务器。

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

目前,我正在使用 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

【问题讨论】:

    标签: c# email client pop3


    【解决方案1】:

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

    需要注意的是,并不是所有的 POP3 服务器都支持 UIDL 命令(毕竟它是一个扩展),所以如果你的代码打算与各种 POP3 服务器一起使用,它就必须处理接着就,随即。你如何处理它取决于你,但我相信我过去的方法是 md5sum 一个 headers 的集合(虽然不是全部,因为一些 POP3 服务器可能会添加或修改 headers,例如 X-Status 或 Status或一些自定义标题)。您可能只需对 Received 标头进行散列即可逃脱。

    【讨论】:

    • 谢谢! :) 我完全忽略了 UIDL 支持问题!你的建议对我很有用!我正在考虑尝试做的事情是以不太频繁的间隔获取所有 UID,并且大多数时候将最后获取的电子邮件 UID 与服务器的最新电子邮件 UID 进行比较。当我遇到一个已经存在于我的获取列表中的 UID 时,我将中断获取(我开始从最近的到最近的获取)。所有这些假设所有 POP3 服务器从 1 开始将他们的消息从旧消息索引到新消息。我不确定我是否可以指望这个假设......
    • “当我遇到一个已经存在于我获取的列表中的 UID 时”或者更有可能是当我遇到一个等于我上次获取的 UID 的 UID 时。
    • 幸运的是,您可以放心订购。
    • 这是个好消息! :) 所以,我想,只有 UIDL 支持问题是我现在需要解决的问题!非常感谢。 :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-24
    • 1970-01-01
    • 1970-01-01
    • 2012-05-23
    • 2018-12-27
    • 1970-01-01
    相关资源
    最近更新 更多