【问题标题】:Persistent UIDs for a mailbox邮箱的持久 UID
【发布时间】:2013-08-29 18:19:16
【问题描述】:

我们必须使用 IMAP 接口开发消息存储,该接口应具有持久 UID 的功能,以便以后可以在多个设备(如移动设备、PC、笔记本电脑)之间同步这些消息,并且设备可以删除/复制消息. RFC 3501 提到 UID 在会话中是唯一的。

所以我的问题是:是否有任何 IMAP RFC 谈论邮箱的持久 UID?

【问题讨论】:

  • IMAP 有什么问题?您可能会希望与它兼容。

标签: imap uid


【解决方案1】:

每个 IMAP 消息都被分配了一个特定于 用户 的 UID,因为两个用户可能会收到两条不同的消息,但会被分配相同的 UID。 [aka UID != UUID] 如果您的软件发出一个简单的FETCH 1:* (FLAGS),服务器将响应一个按顺序编号的列表忽略消息的 UID。任何要专门处理消息 UID 的命令,都必须确保正确发出它,如 FETCH UID 1:* (FLAGS)

例如:

a1 fetch 1:* (flags)
* 1 FETCH (FLAGS (\Seen))
* 2 FETCH (FLAGS (\Seen))
* 3 FETCH (FLAGS (\Seen))
* 4 FETCH (FLAGS (\Seen))
* 5 FETCH (FLAGS (\Answered \Seen))
* 6 FETCH (FLAGS (\Seen))
* 7 FETCH (FLAGS (\Seen))
* 8 FETCH (FLAGS (\Seen))
* 9 FETCH (FLAGS (\Seen))
* 10 FETCH (FLAGS (\Seen))

对比:

a8 uid fetch 1:* (flags)
* 1 FETCH (UID 1 FLAGS (\Seen))
* 2 FETCH (UID 2 FLAGS (\Seen))
* 3 FETCH (UID 3 FLAGS (\Seen))
* 4 FETCH (UID 4 FLAGS (\Seen))
* 5 FETCH (UID 5 FLAGS (\Answered \Seen))
* 6 FETCH (UID 6 FLAGS (\Seen))
* 7 FETCH (UID 8 FLAGS (\Seen))
* 8 FETCH (UID 9 FLAGS (\Seen))
* 9 FETCH (UID 10 FLAGS (\Seen))
* 10 FETCH (UID 11 FLAGS (\Seen))

也就是说,我不明白您为什么需要单独跟踪 UID 以跨多个设备进行同步。只要每个设备都从 IMAP 服务器收集其信息,它们就会默认同步。您实际上是在重新实现任何 IMAP 服务器中已经存在的功能。

【讨论】:

  • 可能更适合作为一个单独的问题,但 imap uid 的(可以|只是)简单的整数?我必须承认,我希望它们看起来更像 uuid,而我阅读 imap RFC 的方式似乎表明它们会像 UUID,但我猜不是?
  • 在 RFC3501 中有 Unique Identifier (UID)Message Sequence Number。所以序列号在每个邮箱 1,2,3,4... 中,并且 UID 在系统范围内是唯一的。两者都是整数,但不是 UUID。 UUID 包含 A-F0-9 和 '-'。
【解决方案2】:

RFC3501 要求的是 UID 在会话中必须保持不变。这并不意味着它们不应该在会话间保持持久——相反,除非它们持久的,否则 IMAP 客户端将不得不一直下载它们。

我建议在这里重新阅读 RFC3501 的相关部分——这是 IMAP 邮箱同步的关键部分,正确处理这一点很重要——包括与 UIDVALIDITY 和 @987654322 的关系@,以及 CONDSTOREQRESYNC 扩展。

另外请记住,对于如何分配 UID 以及新到达消息的 UID必须是什么样子,有非常严格的保证。拥有每个服务器的唯一标识符不够

【讨论】:

    猜你喜欢
    • 2012-12-17
    • 2012-04-24
    • 1970-01-01
    • 2019-11-24
    • 1970-01-01
    • 2015-12-15
    • 2015-11-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多