在我们内部的网络邮件系统中,我们想在某些邮件上附加注释和联系人。为此,我们必须跟踪IMAP服务器上的每个邮件。
不幸的是,IMAP标准没有强制邮箱中的邮件(仅在子文件夹中)的UID的唯一性。是否有任何工具/ IMAP服务器生成真正唯一的UID?还是有其他方法可以识别每封邮件?(Message-ID标头字段不是唯一的,因为某些邮件不包含该字段)。
在我们内部的网络邮件系统中,我们想在某些邮件上附加注释和联系人。为此,我们必须跟踪IMAP服务器上的每个邮件。
不幸的是,IMAP标准没有强制邮箱中的邮件(仅在子文件夹中)的UID的唯一性。是否有任何工具/ IMAP服务器生成真正唯一的UID?还是有其他方法可以识别每封邮件?(Message-ID标头字段不是唯一的,因为某些邮件不包含该字段)。
Answers:
我不知道您说的UID在邮箱中不是唯一的,只是在子文件夹中是什么意思。用子文件夹,您是说INBOX以外的意思吗?无论如何,这听起来是错误的。实际上,每个文件夹中的UID都是唯一的,无论是INBOX还是任何其他文件夹都没有关系。
UID可以在会话之间更改,这可能会发生。通常,如果IMAP服务器丢失其索引并必须重建索引,或者如果邮件从一台IMAP服务器迁移到另一台IMAP服务器等,则会发生这种情况。如果发生这种情况,那么您当然会丢失电子邮件与额外数据之间的所有关联(注释或联系人)。
您可以依靠:UID绝不会突然引用其他消息。它要么保持有效并引用它始终引用的同一消息,否则将变得无效。
您可能想查看您的特定IMAP服务器如何生成和维护UID。不同的IMAP服务器对UID值的持久性做出不同的承诺。即使在一台IMAP服务器中,它也可能根据所使用的邮箱格式而有所不同。例如,对于Dovecot,与mdbox或Maildir相比,使用mdbox预期的脆弱UID更少,因为元数据与使用mdbox的实际电子邮件更紧密地集成在一起。
我建议使用UID Message-ID
作为备份来引用IMAP服务器上的消息。Message-ID
效果不佳,因为可能会重复,并且(对于大多数IMAP服务器)搜索的Message-ID
速度可能较慢,但比完全跟踪消息要好。