IMAP邮件的UID唯一性


11

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

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

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


1
如果仅关于传入电子邮件,添加UUID的自定义MTA过滤器就足够了吗?
neutrinus

Answers:


10

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

是的,确实很烦人。


但是RFC-2822说消息中应该存在消息ID,这意味着根本就没有消息ID
Romeno

1
是的,@ Romeno。IMAP有缺陷,并且Message-ID仅在某些时候有用。
ʇsәɹoɈ

6

我不知道您说的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速度可能较慢,但比完全跟踪消息要好。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.