IMAP的唯一电子邮件标识符

时间:2012-11-27 21:57:08

标签: python django gmail imaplib

我正在使用Django / Python创建一个GMail电子邮件界面。我想创建所有电子邮件的框架,包含主题和日期,一种概述级别的索引,这样即使删除了一封电子邮件,我也会有一个指示符存在以及何时发送。

我的问题是,考虑到IMAP UID发生变化,我可以将哪些内容用作唯一的电子邮件标识符?即使我在数据库中使用唯一ID创建每封电子邮件的骨架,如果我将电子邮件UID和IMAP文件夹名称关联到它,UID也可以在删除其他电子邮件时更改。

为电子邮件创建唯一标识符的最佳解决方案是什么?我正在考虑使用(发送日期,主题)组合,但我正在寻找更简单的东西。

有人可以帮忙吗?

谢谢

2 个答案:

答案 0 :(得分:2)

我的理解是UID不会改变......所以应该将其用作IMAP /你的数据库之间的链接。

来自RFC3501(更新RFC822) - http://www.limilabs.com/mail/rfc/3501

  

2.3.1.1。唯一标识符(UID)消息属性

     

分配给每条消息的32位值,与
用于时   唯一标识符有效性值(见下文)形成64位值
  不得引用邮箱中的任何其他邮件或任何其他信息   永远具有相同名称的后续邮箱。唯一标识符
  在邮箱中以严格提升的方式分配;如每个   消息被添加到邮箱,它被分配了比B1更高的UID   先前添加的消息。与消息序列不同   数字,唯一标识符不一定是连续的。

     

消息的唯一标识符在转换期间不得更改   会话,不应该在会话之间改变。任何改变   会话之间的唯一标识符必须使用
来检测   UIDVALIDITY机制在下面讨论。

答案 1 :(得分:0)

我发现每个文件夹都有自己的UID种子,这意味着您将在不同的文件夹中为不同的邮件提供重复的UID。 RFC822指定了另一个标识符,即电子邮件的Message-ID标头,通常是自动生成的(例如Gmail),您可以在移动邮件后使用它来修复您的UID。 IMAP支持查询某些字段,如UID,MessageID。

使用此组合键,您始终可以跟踪系统中的每条消息。

如果您自己进行发送,则可以生成自己的MessageID。以下是如何生成它:

http://www.jwz.org/doc/mid.html

更多阅读:

http://en.wikipedia.org/wiki/Message-ID