1

我正在研究一个可以管理多个邮箱的电子邮件管理器。这是我的场景:我通过邮箱获取邮件并将它们的属性存储在数据库中,包括 uid。邮箱可以配置为使用imap或pop3协议下载,这取决于邮箱本身。

POP3 uids: 消息的唯一 ID 是由服务器确定的任意字符串,由 0x21 到 0x7E 范围内的 1 到 70 个字符组成,它唯一地标识了邮件投递中的消息,并且在会话中持续存在。

IMAP uids: 分配给每条消息的 32 位值,当与唯一标识符有效性值(见下文)一起使用时,形成一个 64 位值,该值不得引用邮箱中的任何其他消息或具有相同的任何后续邮箱永远的名字。

因此,几乎不可能找到两个相同的 POP3 uid,尽管在不同的邮箱之间。但更有可能发生在 IMAP uid 上。

所以,我需要确定 uid 都是不同的。我不需要代码来做,我只需要知道是否可以做,如何做,需要一个正确的推理。

4

1 回答 1

3

POP3 标准不保证 UID 是唯一的——您可以使用通用 UID 看到不同的消息。

IMAP 没有可以按照您希望它们工作的方式工作的持久 UID。UID 保证在单个邮箱中是唯一的,但在某些情况下它们可能会被更改(请参阅 RFC 3501 和 UIDVALIDITY 响应)。简而言之,IMAP 提供的唯一保证是,(mailbox name, UIDVALIDITY, UID)无论发生什么,三元组 都将引用单个消息。这对于例如缓存消息部分很有用,因为它们保证是不可变的。请注意,这并不意味着一条消息将始终被分配同一个三元组——根本不是,即使它仍然在同一个邮箱中。

有一些非标准的扩展试图为您提供某种 GUID,但这些在 IMAP 服务器实现之间有所不同,并且并非在任何地方都可用。

于 2013-06-06T12:29:18.257 回答