在我们的内部networking邮件系统中,我们希望附加注释和联系人到某些邮件。 为了做到这一点,我们必须跟踪我们的IMAP服务器上的每个邮件。
不幸的是,IMAP标准不强制邮箱中的邮件的UID的唯一性(仅在子文件夹中)。 有没有任何工具/ IMAP服务器生成真正独特的UID? 或者,有没有其他方法可以识别每封邮件? ( Message-ID头域不是唯一的,因为有些邮件不包含这样的域)。
其他资源: IMAP协议中的唯一ID – Limilabs.com
我不知道你说的UID在一个邮箱中是不是唯一的,只是在子文件夹中。 通过子文件夹,你的意思是什么除了INBOX? 无论如何,这听起来不对。 UID在每个文件夹中都是唯一的,不pipe它是INBOX还是其他文件夹。
会发生什么是UID可以在会话之间改变。 通常情况下,如果IMAP服务器丢失索引并重build它们,或者如果邮件从一个IMAP服务器迁移到另一个IMAP服务器,则会发生这种情况…如果发生这种情况,那么您当然会失去电子邮件和额外数据之间的所有关联(笔记或联系人)。
你可以依靠这个:一个UID永远不会突然引用一个不同的消息。 要么它将保持有效,并且引用它总是提到的相同的消息,否则它将变成无效的。
您可能想要查看您的特定IMAP服务器如何生成和维护UID。 不同的IMAP服务器对UID值的持续性做出了不同的承诺。 即使在一个IMAP服务器中,它也可能因所使用的邮箱格式而异。 例如,对于Dovecot,使用mdbox的UID比使用mbox或Maildir的UID要less,因为元数据与具有mdbox的实际电子邮件更紧密地结合在一起。
我build议使用UID来引用IMAP服务器上的Message-ID ,并将Message-ID作为备份。 Message-ID不太好,因为重复是可能的,并且(对于大多数IMAP服务器)通过Message-ID进行search可能会比较慢,但是比完全丢失消息跟踪要好。
(文件夹名称,文件夹UIDVALIDITY,消息UID)的元组区分IMAP帐户中的所有其他消息。 对于任何给定的消息,该元组可以在会话之间改变,所以你可能想跟踪它的消息ID作为备份,以防发生这种情况。
是的,这真的很烦人。