1

确保 IMAP 客户端与其服务器同步的一种方法是利用 SEEN 标志(例如,用于 IMAP IDLE 的库)。

我自己还没有使用过这个,但我想知道设置 SEEN 标志是否基本上将消息设置为在服务器上“读取”。

如果是这样,当涉及多个阅读器或用户直接登录服务器(例如,登录到他们的 Gmail 帐户)并在那里阅读邮件(因此它被“标记为已读”时,这显然是一个问题,并且 - 因此- 标记为已看到)。

或者,我可能完全误解了这一点,而 SEEN 在特定客户端和服务器之间是独一无二的。但是,不清楚在这种情况下如何保持状态。

4

1 回答 1

2

“利用 SEEN 标志”听起来像是一种与服务器同步的糟糕方法。正如您所猜测的,设置 SEEN 标志基本上会将消息设置为在服务器上“读取”。所有其他 IMAP 客户端将看到该消息已被读取。该标志在服务器和每个客户端之间不是“私有的”。除非用户已经看到,否则您的客户端不应将消息标记为“已看到”。

要进行同步,您需要跟踪客户端已经看到的消息的 UID,并在轮询文件夹时将列表与服务器上可用的列表进行比较。然后,您在本地丢弃不再在服务器上的那些(它们是已从其他客户端删除的消息)并下载您在本地列表中没有的那些(它们是新消息)。

如果您想要健壮并处理服务器忘记所有消息的 UID 并使用新 UID 重建文件夹的情况,它会变得更加复杂(如果索引损坏并在服务器上重建,服务器软件已更改,则可能会发生这种情况,服务器已成为不同的托管服务提供商等...)但这是基本思想。

于 2013-01-26T22:11:34.050 回答