2010-09-23 106 views
4

我試圖獲得一個唯一的ID,它在操作過程中沒有改變。我認爲UID不好。所以我認爲'消息ID'是正確的,但我不知道如何得到它。我知道只是imap.fetch(uid,'XXXX'),任何人都有一個解決方案?如何使用imaplib獲得'消息ID'

+0

運行過程中是否不發送ID更改? – 2010-09-23 05:39:28

+0

@ Manoj Govindan:不,在任何操作過程中,Message-Id都不會改變。 – Avadhesh 2010-09-23 09:18:23

+0

它在會話之間切換 - UID保持不變 - 對嗎? – mrmnmly 2016-10-26 08:30:44

回答

6

來自IMAP文檔本身:

IMAP4消息號碼隨郵箱更改而變化;特別是在EXPUNGE命令執行刪除操作後,剩餘的消息將被重新編號。因此,使用UID命令來代替使用UID是非常明智的。

討論在SO:About IMAP UID with imaplib

IMAP4.fetch(message_set, 'UID') 

獲取是得到消息的UID的最佳方法

而且讓你可以做一些這樣的事情的消息ID,雖然不是所有的消息可能有一個消息ID。

server.select(imap_folder) 
# List all messages 
typ, data = server.search(None, 'ALL') 
# iterate through messages 
for num in data[0].split(): 
    typ, data = server.fetch(num, '(BODY[HEADER.FIELDS (MESSAGE-ID)])') 
    # parse data to get message id 
+1

@pyfunc:但是您接受的問題的答案是「注意:UID已更改,但郵件標識在該郵件的任何操作過程中不會更改」)。 – 2010-09-23 05:48:46

+0

是的,IMAP lib文檔與討論相矛盾 – pyfunc 2010-09-23 05:58:58

+1

UID不會改變,但與將消息移動到另一個郵箱的討論相關的問題。移動之後,UID會有所不同 - 這是一個真正的新消息在不同的位置。 – 2010-09-23 07:36:20

4

你可以試試這個python代碼來獲取所有郵件的標題信息。

import imaplib 
import email 

obj = imaplib.IMAP4_SSL('imap.gmail.com', 993) 
obj.login('username', 'password') 
obj.select('folder_name') 
resp,data = obj.uid('FETCH', '1:*' , '(RFC822.HEADER)') 
messages = [data[i][1].strip() + "\r\nSize:" + data[i][0].split()[4] + "\r\nUID:" + data[i][0].split()[2] for i in xrange(0, len(data), 2)] 
for msg in messages: 
    msg_str = email.message_from_string(msg) 
    message_id = msg_str.get('Message-ID') 
1

有這個更容易的方法...

typ, data = obj.fetch(num, '(BODY[HEADER.FIELDS (MESSAGE-ID)])') 
msg_str = email.message_from_string(data[0][1]) 
message_id = msg_str.get('Message-ID') 
print message_id 

希望這有助於!

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

如果您在帖子中添加了一些解釋,這將會很有幫助。在編程任何語言或系統時,它背後的*邏輯*是最重要的,而實際的*代碼*僅次於邏輯 - 理解邏輯可以幫助人們學習如何自己編寫這些代碼,並調整它以適應他們的需求。 – CodeMouse92 2015-09-24 19:37:27