IMAP同步

Bri*_*ian 12 imap

我正在实现IMAP客户端,我遇到了IMAP邮箱同步问题.

首先,可以从IMAP服务器获取新邮件,但我不知道如何从邮箱中查找已删除的邮件.

我应该从服务器获取所有消息并将其与本地数据进行比较以进行同步吗?

nos*_*sid 23

通常的方法是为每个文件夹执行以下两个IMAP命令:

. EXAMINE "<foldername>"
. FETCH 1:* (UID FLAGS)
Run Code Online (Sandbox Code Playgroud)

第一个命令选择一个文件夹并返回该文件夹的UIDVALIDITY.如果此值与先前为此文件夹返回的UIDVALIDITY匹配,则可以依赖UID.第二个命令返回(至少)所选文件夹中每个邮件的UID和所有FLAGS.

  • 您应该使用UID来检测已添加或删除的邮件.请注意,如果不更改UID,则无法更改电子邮件的内容.
  • 在基本IMAP中,FLAGS是可以为电子邮件更改的唯一属性.标志包含有关已读邮件(\Seen)和已删除邮件(\Deleted)的信息.

许多IMAP客户端都使用此方法,并且大多数IMAP服务器都针对它们进行了优化.限制因素通常是客户端和服务器之间的可用网络带宽.

以下情况有点复杂:

  • 如果UIDVALIDITY不匹配应该怎么办?IMAP规范要求服务器尽最大努力避免对此值进行不必要的更改.
  • 移动邮件(实际复制的邮件)是否应该优化?在基本IMAP中,您无法检测到电子邮件是另一封电子邮件的副本 - 无论源文件夹中的电子邮件是否仍然存在,或者该邮件是否已被删除和清除.


小智 13

您的应用可能为时已晚,但您可以在此RFC中找到完整的IMAP同步策略:http://tools.ietf.org/html/rfc4549!