【发布时间】:2012-04-14 22:14:20
【问题描述】:
我正在实现一个 IMAP 客户端,但我遇到了 IMAP 邮箱同步问题。
首先,可以从 IMAP 服务器获取新邮件,但我不知道如何从邮箱中找到已删除的邮件。
我应该从服务器获取所有消息并将其与本地数据进行比较以进行同步吗?
【问题讨论】:
标签: imap
我正在实现一个 IMAP 客户端,但我遇到了 IMAP 邮箱同步问题。
首先,可以从 IMAP 服务器获取新邮件,但我不知道如何从邮箱中找到已删除的邮件。
我应该从服务器获取所有消息并将其与本地数据进行比较以进行同步吗?
【问题讨论】:
标签: imap
通常的做法是对每个文件夹执行以下两条 IMAP 命令:
. EXAMINE "<foldername>"
. FETCH 1:* (UID FLAGS)
第一个命令选择一个文件夹并返回该文件夹的UIDVALIDITY。如果此值与之前为该文件夹返回的 UIDVALIDITY 匹配,则您可以依赖 UID。第二个命令(至少)返回所选文件夹中每封邮件的 UID 和所有 FLAGS。
\Seen) 和已删除邮件 (\Deleted) 的信息。许多 IMAP 客户端都使用这种方法,并且大多数 IMAP 服务器都针对它们进行了优化。限制因素通常是客户端和服务器之间的可用网络带宽。
以下情况稍微复杂一点:
【讨论】:
EXAMINE "folder" 然后UID SEARCH 1:*。这将提供当前邮箱中所有 UID 的列表,可以与您的本地缓存进行比较。
对于您的应用来说可能为时已晚,但您可以在此 RFC 中找到完整的 IMAP 同步策略:https://www.rfc-editor.org/rfc/rfc4549!
【讨论】: