在我们的内部网络邮件系统中,我们想将注释和联系人附加到某些邮件中。为了做到这一点,我们必须在 IMAP 服务器上跟踪每封邮件。
不幸的是,IMAP 标准不强制要求邮箱中邮件的 UID 的唯一性(仅在子文件夹中)。是否有任何工具/IMAP 服务器可以生成真正唯一的 UID?或者我们还有其他方法可以识别每封邮件?(信息ID头字段不是唯一的,因为有些邮件不包含这样的字段)。
答案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
可能会更慢,但这比完全丢失消息轨迹要好。