IMAP 邮件的 UID 唯一性

Sec*_*one 10 email imap

在我们的内部网络邮件系统中,我们希望在某些邮件中附加注释和联系人。为此,我们必须跟踪 IMAP 服务器上的每封邮件。

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

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

ʇsә*_*ɹoɈ 10

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

是的,这真的很烦人。


Cel*_*ada 6

我不知道你说 UID 在邮箱中不是唯一的,只是在子文件夹中是什么意思。子文件夹是指除 INBOX 之外的其他文件夹吗?无论如何,这听起来是错误的。UID 实际上在每个文件夹中都是唯一的,它是收件箱还是任何其他文件夹都没有关系。

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

您可以依赖这一点:UID 永远不会突然引用不同的消息。要么它将保持有效并引用它一直引用的相同消息,否则它将变得无效。

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

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