【问题标题】:Different imap mailboxes uid trouble不同的imap邮箱uid麻烦
【发布时间】:2013-06-06 20:29:18
【问题描述】:

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

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

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

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

所以,我需要确定 uid 都是不同的。 我不需要代码来做,我只需要知道能不能做,怎么做,需要一个正确的推理做。

【问题讨论】:

  • 为什么不将 uid 与标识更正/服务器/用户/等的 id 一起存储。
  • 问题是我不能改变表结构,它是:timestamp,from,to,cc,subject,body,attachment。否则这将是一个好主意。 @RowlandShaw
  • 所以,将 accountid 连接到 UID。 --

标签: imap pop3 uid


【解决方案1】:

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

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

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

【讨论】:

  • 两个不同的 imap 账户是否有可能有重复的 UID?
  • @DS9,是的,当然! UID 仅在一个“邮箱”(也称为“文件夹”)内是唯一的,并且仅在相应的 UIDVALIDITY 值更改之前。这些 UID 不是全局唯一的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-01-05
  • 1970-01-01
  • 1970-01-01
  • 2010-10-24
  • 2013-03-01
  • 1970-01-01
  • 2021-05-21
相关资源
最近更新 更多