我正在实现 IMAP 客户端,但 IMAP 邮箱同步出现问题。

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

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

最佳答案

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

. EXAMINE "<foldername>"
. FETCH 1:* (UID FLAGS)

第一个命令选择一个文件夹并返回该文件夹的 UIDVALIDITY。如果此值与之前为此文件夹返回的 UIDVALIDITY 匹配,则您可以依赖 UID。第二个命令返回(至少)所选文件夹中每封邮件的 UID 和所有 FLAGS。
  • 您应该使用 UID 来检测已添加或删除的邮件。请注意,如果不更改 UID,则无法更改电子邮件的内容。
  • 在基本 IMAP 中,标志是唯一可以为电子邮件更改的属性。这些标志包含有关已读邮件 ( \Seen ) 和已删除邮件 ( \Deleted ) 的信息。

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

    以下情况稍微复杂一些:
  • UIDVALIDITY不匹配怎么办? IMAP 规范要求服务器尽最大努力避免对该值进行不必要的更改。
  • 是否应该对移动的邮件(实际上是复制的邮件)进行优化?在基本 IMAP 中,您无法检测到一封电子邮件是另一封电子邮件的副本——无论源文件夹中的电子邮件是否仍然存在,或者它是否已被删除和清除。
  • 关于IMAP 同步,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9956324/

    10-15 02:27