2013-12-23 51 views
0

我一直在閱讀this document。大部分文件都基於找到電子郵件的uid。從文章:如何找到現有的python郵件對象的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應用程序稱爲Django的郵箱(http://django-mailbox.readthedocs.org/en/latest/index.html),其目的是消耗郵件工作。

該應用程序創建一個「消息」的模式,看起來像:

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「電子郵件」庫我可以選擇從Django的查詢集的記錄,並把它變成一個電子郵件對象:

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

是否在數據庫中已有的數據有一個UID,如果是這樣我怎麼能抓住它。

+0

你如何「重構」數據庫信息到電子郵件對象?它只是您想要回想的序列化數據,還是您手動構建它? – iandouglas

+0

請參閱更新的問題以獲取更多詳細信息 – user61629

回答

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值,但除非您還將這些值存儲在數據庫中,否則您將一遍又一遍地重新生成它們。

如果您願意分享有關你想構建什麼更精確的信息(基於Web的電子郵件的讀者,也許?),那麼我們作爲一個社會可能對你有一些更好的想法。

+0

感謝Ian,我剛開始深入瞭解imap和python電子郵件庫的工作原理,所以這非常有幫助。 - 問候,比爾 – user61629

相關問題