【问题标题】:IMAP Folders with MailCore2带有 MailCore2 的 IMAP 文件夹
【发布时间】:2015-02-07 16:26:48
【问题描述】:

我正在使用MCOIMAPFetchFoldersOperation 下载我的文件夹,它为我提供了一个很好的所有文件夹列表:

  • INBOX
  • [Gmail]
  • [Gmail]/All Mail
  • [Gmail]/Drafts
  • [Gmail]/Important
  • [Gmail]/Sent Mail
  • [Gmail]/Starred
  • [Gmail]/Trash

当我为我的文件夹获取消息时,我得到了大量的重复消息,因为同一消息可以存在于 INBOX[Gmail]/All Mail[Gmail]/Important 等人中。同时。我使用消息 UID 检查是否存在欺骗,但 UID 仅在特定文件夹中是唯一的,因此在这种情况下没有用。

最兼容的方法是什么?

【问题讨论】:

    标签: imap mailcore2


    【解决方案1】:

    Gmail IMAP extensions 中所述,您可以获取消息的X-GM-MSGID 属性。此值在文件夹中是唯一的。

    您可以获取所有新邮件的X-GM-MSGID 值,检查您已经下载了哪些邮件,然后下载丢失的邮件。

    这就是在 IMAP 中获取消息 id 的样子;不确定如何在 Mailcore2 中做到这一点。

    a006 FETCH 1 (X-GM-MSGID)
    * 1 FETCH (X-GM-MSGID 1278455344230334865)
    a006 OK FETCH (Success)
    

    这是特定于 Gmail 的。您可以通过在CAPABILITY 响应中查找X-GM-EXT-1 来检查服务器是否支持它。据我所知,没有标准的方法可以做到这一点。 IMAP RFC 没有同一消息出现在多个邮箱中的概念。

    【讨论】:

    • 谢谢。我的意思是兼容是在提供者之间兼容。我当然可以使用Message-ID,但并不能保证它是独一无二的,甚至根本不存在。
    • 提供商之间不兼容,因为这种“重复消息”是 gmail 独有的。没有其他 IMAP 服务器提供同一消息的多个视图。 X-GM-MSGID 是消除它们歧义的唯一可靠方法。注意,X-GM-MSGID,而不是 Message-Id:。它们是完全不同的概念。
    • 谢谢 Max,我不知道。为 GMail 使用 X-GM-MSGID 而不必担心其他提供商似乎足够兼容!
    • 要扩展此答案和 Max 的评论,如果您在获取消息时包含 MCOIMAPMessagesRequestKindGmailMessageID,则可以使用 -[MCOIMAPMessage gmailMessageID] 访问来自 X-GM-MSGID 的值。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-07-18
    • 2015-04-15
    • 2014-09-20
    • 1970-01-01
    • 2011-08-07
    • 1970-01-01
    • 2012-04-28
    相关资源
    最近更新 更多