【问题标题】:IMAP synchronizationIMAP 同步
【发布时间】:2012-04-14 22:14:20
【问题描述】:

我正在实现一个 IMAP 客户端,但我遇到了 IMAP 邮箱同步问题。

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

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

【问题讨论】:

    标签: imap


    【解决方案1】:

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

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

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

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

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

    以下情况稍微复杂一点:

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

    【讨论】:

    • UIDPLUS 扩展可以帮助移动/复制电子邮件。发现已删除邮件的另一种方法是使用 UID SEARCH:EXAMINE "folder" 然后UID SEARCH 1:*。这将提供当前邮箱中所有 UID 的列表,可以与您的本地缓存进行比较。
    【解决方案2】:

    对于您的应用来说可能为时已晚,但您可以在此 RFC 中找到完整的 IMAP 同步策略https://www.rfc-editor.org/rfc/rfc4549

    【讨论】:

    • tl;博士。哪里有总结?
    猜你喜欢
    • 2012-05-28
    • 1970-01-01
    • 1970-01-01
    • 2013-01-18
    • 2010-10-10
    • 2015-04-15
    • 2014-07-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多