检查IMAP4中的更改/新消息?

时间:2014-05-08 01:08:48

标签: imap

我基本上想要做与此问题中提到的相同的内容:How to retrieve only new emails using POP3 protocol但是对于IMAP4而不是POP3,所以同样的前提但完全不同的答案。

如果我之前已经下载了所有邮件标题和UID等,并且可以随意使用这些信息,那么如何才能有效地找出新邮件/更改/删除的邮件,以便我可以无需重新下载这些邮件 - 下载所有看到的消息?

目前,我FETCH为每个本地消息ID UID查看是否有新的或缺少的UID,然后FETCH RFC822 Sent 5/7/2014 9:42:08 AM: C5 FETCH 1 (UID)<EOL> Recv 5/7/2014 9:42:08 AM: * 1 FETCH (UID 46987)<EOL>C5 OK Fetch completed.<EOL> Sent 5/7/2014 9:42:08 AM: C6 FETCH 2 (UID)<EOL> Recv 5/7/2014 9:42:08 AM: * 2 FETCH (UID 46989)<EOL>C6 OK Fetch completed.<EOL> 每个新UID的数据。但实际上,这看起来非常慢,所以我想看看我是否能找到一种更有效的方法来识别新的/改变的消息。

RECENT

我一直在看RFC for IMAP,看起来可能会有一些听起来可能相关的命令(例如{{1}}),但我对这些来龙去掉的不够熟悉对IMAP来说,确保我已经走上了正轨。

1 个答案:

答案 0 :(得分:1)

根据RFC 3501中的此评论,使用范围为FETCH的{​​{1}}:

  

注意:下一个唯一标识符值是用于   为客户提供确定是否有的手段   邮件已经传递到邮箱了   上一次它检查了这个值。它无意   保证任何消息都有这个   唯一标识符。客户当时只能假设   它获得下一个唯一标识符值,即   在该时间之后到达的消息将具有更大的UID   等于或等于该值。

因此,如果您最后看到的最高UID是242,那么您将获取[$lastSeenHighestUID+1]:*

243:*not terribly reliable,因为第一个客户端会看到该标志然后删除该标志。如果您的代码是不幸的第二个(或第n个&gt; = 2),那么您永远不会知道该消息是最近的。