我正在使用Django / Python创建一个GMail电子邮件界面。我想创建所有电子邮件的框架,包含主题和日期,一种概述级别的索引,这样即使删除了一封电子邮件,我也会有一个指示符存在以及何时发送。
我的问题是,考虑到IMAP UID发生变化,我可以将哪些内容用作唯一的电子邮件标识符?即使我在数据库中使用唯一ID创建每封电子邮件的骨架,如果我将电子邮件UID和IMAP文件夹名称关联到它,UID也可以在删除其他电子邮件时更改。
为电子邮件创建唯一标识符的最佳解决方案是什么?我正在考虑使用(发送日期,主题)组合,但我正在寻找更简单的东西。
有人可以帮忙吗?
谢谢
答案 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
更多阅读: