簡體   English   中英

如何使用imaplib獲取'Message-ID'

[英]How to get 'Message-ID' using imaplib

我嘗試獲得一個在操作期間不會改變的唯一ID。 我認為UID並不好。 所以我認為'Message-ID'是正確的,但我不知道如何得到它。 我只知道imap.fetch(uid,'XXXX'),任何人都有解決方案嗎?

從IMAP文檔本身:

IMAP4消息號隨郵箱的變化而變化; 特別是,在EXPUNGE命令執行刪除后,剩余的消息將重新編號。 因此,建議使用UID代替UID命令。

在SO討論: 關於使用imaplib的IMAP UID

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

您可以嘗試使用此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')

有更簡單的方法...

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

希望這可以幫助!

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]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM