如何找到现有python电子邮件对象的uid

时间:2013-12-23 06:01:43

标签: python django email imap

我一直在阅读this document。大部分文档都是基于查找电子邮件的uid。来自文章:

"The way this works is pretty simple: use the uid function, and pass in the string of the command in as the first argument. The rest behaves exactly the same.

result, data = mail.uid('search', None, "ALL") # search and return uids instead
latest_email_uid = data[0].split()[-1]
result, data = mail.uid('fetch', latest_email_uid, '(RFC822)')
raw_email = data[0][1]

我正在使用名为django-mailbox(http://django-mailbox.readthedocs.org/en/latest/index.html)的django应用程序,其目的是使用电子邮件。

该应用会创建一个“消息”模型,如下所示:

u'django_mailbox.message': {
        'Meta': {'object_name': 'Message'},
        'body': ('django.db.models.fields.TextField', [], {}),
        'encoded': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
        'from_header': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
        u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
        'in_reply_to': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'replies'", 'null': 'True', 'to': u"orm['django_mailbox.Message']"}),
        'mailbox': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'messages'", 'to': u"orm['django_mailbox.Mailbox']"}),
        'message_id': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
        'outgoing': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
        'processed': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
        'read': ('django.db.models.fields.DateTimeField', [], {'default': 'None', 'null': 'True', 'blank': 'True'}),
        'subject': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
        'to_header': ('django.db.models.fields.TextField', [], {}) 

使用python“email”库我可以从django查询集中选择一条记录并将其转换为电子邮件对象:

qs = Message.objects.filter("my criteria")
first = qs[0]
one = first.get_email_object() // one is an email object

db中的现有数据是否具有uid,如果是,我该如何获取它。

1 个答案:

答案 0 :(得分:1)

对你的问题的严格回答是“不”。您引用的文档是关于循环访问IMAP文件夹(在本例中为Gmail帐户),该文件夹肯定会从服务器获取一个唯一ID(uid),用于跟踪每封电子邮件的唯一邮件ID。

因为您正在使用Django构建邮件消息对象,所以您不会有这样的UID。您从django.db.models.fields.AutoField获得的“ID”字段是您引用的Gmail / IMAP网页所说的顺序自动增量ID是“不可接受的”。

您可能需要查看“uuid”库(http://docs.python.org/2/library/uuid.html)来为您的邮件生成唯一的ID值,但除非您将这些值存储在数据库中,否则您将重新生成它们。结束了。

如果您想分享有关您正在尝试构建的内容的更准确信息(也许是基于网络的电子邮件阅读器?)那么我们作为一个社区可能会为您提供一些更好的想法。