我基本上想要做与此问题中提到的相同的内容: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来说,确保我已经走上了正轨。
答案 0 :(得分:1)
根据RFC 3501中的此评论,使用范围为FETCH
的{{1}}:
注意:下一个唯一标识符值是用于 为客户提供确定是否有的手段 邮件已经传递到邮箱了 上一次它检查了这个值。它无意 保证任何消息都有这个 唯一标识符。客户当时只能假设 它获得下一个唯一标识符值,即 在该时间之后到达的消息将具有更大的UID 等于或等于该值。
因此,如果您最后看到的最高UID是242,那么您将获取[$lastSeenHighestUID+1]:*
。
243:*
是not terribly reliable,因为第一个客户端会看到该标志然后删除该标志。如果您的代码是不幸的第二个(或第n个&gt; = 2),那么您永远不会知道该消息是最近的。