IMAP 邮件的 UID 唯一性

IMAP 邮件的 UID 唯一性

在我们的内部网络邮件系统中,我们想将注释和联系人附加到某些邮件中。为了做到这一点,我们必须在 IMAP 服务器上跟踪每封邮件。

不幸的是,IMAP 标准不强制要求邮箱中邮件的 UID 的唯一性(仅在子文件夹中)。是否有任何工具/IMAP 服务器可以生成真正唯一的 UID?或者我们还有其他方法可以识别每封邮件?(信息ID头字段不是唯一的,因为有些邮件不包含这样的字段)。

其他资源: IMAP 协议中的唯一 ID - Limilabs.com

答案1

(文件夹名称、文件夹 UIDVALIDITY、消息 UID)三元组可将消息与 IMAP 帐户中的所有其他消息区分开来。对于任何给定的消息,该三元组可能会在会话之间发生变化,因此您可能需要跟踪其消息 ID 作为备份,以防发生这种情况。

是的,这确实是很烦人。

答案2

我不知道您说的 UID 在邮箱中不是唯一的,只是在子文件夹中唯一是什么意思。您说的子文件夹是指收件箱以外的文件夹吗?无论如何,这听起来不对。事实上,UID 在每个文件夹中都是唯一的,无论是收件箱还是其他文件夹都无关紧要。

什么可能发生的情况是 UID 可以在会话之间更改。通常,如果 IMAP 服务器丢失其索引并必须重建它们,或者邮件从一个 IMAP 服务器迁移到另一个 IMAP 服务器等,就会发生这种情况...如果发生这种情况,那么您当然会丢失电子邮件和额外数据(注释或联系人)之间的所有关联。

您可以信赖这一点:UID 绝不会突然引用不同的消息。它要么保持有效并引用它始终引用的同一条消息,要么变为无效。

您可能想要查看特定 IMAP 服务器如何生成和维护 UID。不同的 IMAP 服务器对 UID 值的持久性做出不同的承诺。即使在一个 IMAP 服务器中,它也可能因使用的邮箱格式而异。例如,使用 Dovecot 时,mdbox 的 UID 比 mbox 或 Maildir 的 UID 更不易损坏,因为 mdbox 的元数据与实际电子邮件更紧密地集成在一起。

我建议使用 UID 来引用 IMAP 服务器上的消息,作为Message-ID备份。Message-ID这不是很好,因为可能存在重复,并且(对于大多数 IMAP 服务器)搜索Message-ID可能会更慢,但这比完全丢失消息轨迹要好。

相关内容