我正在研究一个可以管理多个邮箱的电子邮件管理器。 这是我的场景:我通过邮箱获取邮件,并将其属性存储在数据库中,包括uid。邮箱可以配置为使用imap或pop3协议下载,具体取决于邮箱本身。
POP3 uids: 消息的唯一ID是由服务器确定的任意字符串,由0x21到0x7E范围内的1到70个字符组成,它唯一标识一条消息一个maildrop,它会在会话中持续存在。
IMAP uids: 分配给每条消息的32位值,当与唯一标识符有效性值(见下文)一起使用时,形成一个绝不能引用的64位值邮箱中的任何其他邮件或永远具有相同名称的任何后续邮箱。
因此,尽管在不同的邮箱之间,但几乎不可能找到两个相同的POP3 uid。但更有可能发生IMAP uids。
所以,我需要确定uid是不同的。 我不需要代码来执行它,我只需要知道是否可以执行它,以及如何执行它,需要正确的推理。
答案 0 :(得分:3)
POP3标准不保证UID是唯一的 - 您可以看到具有公共UID的不同消息。
IMAP没有可以按照您希望的方式工作的持久性UID。保证UID在单个邮箱中是唯一的,但在某些情况下它们可能会更改(请参阅RFC 3501和UIDVALIDITY响应)。简而言之,IMAP提供的唯一保证是(mailbox name, UIDVALIDITY, UID)
的三元组将引用单个消息,无论发生什么。这对于例如缓存消息部分,因为它们保证是不可变的。请注意,这样做不意味着单个邮件将始终分配相同的三元组 - 完全没有,即使它仍然在同一个邮箱中。
有些非标准扩展试图为您提供某种GUID,但这些扩展在IMAP服务器实现之间有所不同,并且在任何地方都不可用。