我尝试获得一个在操作期间不会改变的唯一ID。我认为UID并不好。所以我认为'Message-ID'是正确的,但我不知道如何得到它。我只知道imap.fetch(uid,'XXXX'),任何人都有解决方案吗?。
答案 0 :(得分:7)
从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 :(得分: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')
答案 2 :(得分:2)
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]
答案 3 :(得分: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
希望这有帮助!