如何正确处理电子邮件 uid 在以前的会话中的变化?



我有一个简单的服务器,它侦听来自一个或多个文件夹以及一个或多个邮箱的传入电子邮件。

下载的邮件(除了它们的正文和附件之外的几乎所有邮件)都保留在数据库中,因此即使是它们的 UID 和它们也可以在客户端每次需要时通过其 UID 引用来检索它们。

不幸的是,我"刚刚"发现邮件服务器可能会重新编号部分或全部邮件,因此重新编号会使我以前保留在数据库中的所有 UIDS 无效。

我不明白我应该采取什么措施来克服这种行为,这种重新编号,我能做些什么来拦截这种重新编号,以及我能做些什么来重新编号我的消息,其中的一部分还是全部?

我已经了解了UIDValidity机制,但是当我发现它的变化时,我不明白到底该怎么做。

我在想:

  1. 对于邮件服务器中的每封邮件
  2. 在我的数据库中搜索它,与其主题、日期和消息 ID 匹配
  3. 如果找到,请使用其新的 UID 更新数据库中的消息

此致敬意

你真的什么都做不了。一旦 IMAP 服务器告诉您UIDVALIDITY已更改,那么唯一符合标准、可靠和安全的操作就是丢弃本地缓存中的所有内容。

有一些非标准扩展可能会对您有所帮助。例如,GMail有自己的X-GM-MSGID,但它没有具体说明这些是否在UIDVALIDITY更改时失效。

Courier 和 Dovecot 维护者做出了一些努力,以标准化用于计算单个消息的加密哈希的DIGEST扩展。这些正是您正在寻找的。但是,我认为这些从未标准化过。另外,请记住,MIME 标准允许任何给定消息的多个等效表示形式(想想各种 8 位编码方案)。一旦MIME结构发生变化,任何身体消化都会中断。

如果我是你,我不会尝试使用Message-Id。其值由用户控制。

一般来说,UIDVALIDITY不应该改变。 如果是这样,您应该对该文件夹进行完全重新同步(删除所有内容并从零开始同步)。

如果它确实发生了变化,这可能意味着它实际上是一个不同的文件夹。 例如,删除文件夹并将其他文件夹重命名为旧文件夹的名称。 或者删除文件夹或重新创建具有相同名称的新文件夹。 相同的名称,不同的文件夹,不同的UIDVALIDITY

相关内容

  • 没有找到相关文章

最新更新