确保IMAP客户端与其服务器同步的一种方式是利用SEEN标志(例如,Library for IMAP IDLE)。
我自己还没有用过,但我想知道设置SEEN标志是否基本上将服务器上的消息设置为"read“。
如果是这样的话,当涉及多个阅读器时,或者当用户直接登录到服务器(例如,登录到他们的Gmail帐户)并在那里阅读消息(因此它被标记为“已读”,并因此被标记为可见)时,这显然是一个问题。
或者,我可能完全误解了这一点,认为这是特定客户端和服务器之间独一无二的东西。但是,不清楚在这种情况下如何维护状态。
发布于 2013-01-27 06:11:34
“利用SEEN标志”听起来不是与服务器同步的好方法。正如您猜测的那样,设置SEEN标志基本上会将服务器上的消息设置为"read“。所有其他IMAP客户端都将看到该消息已被读取。该标志在服务器和每个客户端之间不是“私有的”。您的客户端不应该标记所看到的消息,除非用户已经看到它。
要进行同步,您需要跟踪客户端已经看到的邮件的UID,并在每次轮询文件夹时将该列表与服务器上可用的UID进行比较。然后在本地丢弃那些不再在服务器上的邮件(它们是从其他客户端删除的邮件),并下载本地列表中没有的邮件(它们是新邮件)。
如果你想变得健壮,并处理服务器忘记了所有邮件的UID并用新的UID重建文件夹的情况(如果索引损坏并在服务器上重建,服务器软件被更改,服务器已成为不同的主机提供商,等等),情况就会变得更加复杂。但这是基本的想法。
https://stackoverflow.com/questions/14541862
复制相似问题