如何使用imaplib获取'Message-ID
我想要一个在操作过程中不会改变的唯一标识符。我觉得UID不太合适。所以我认为“消息ID”是更好的选择,但我不知道怎么获取它。我只知道用imap.fetch(uid, 'XXXX'),有没有人能给个解决办法?
4 个回答
5
其实有一个更简单的方法来解决这个问题...
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
希望这对你有帮助!
7
你可以试试这段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')
10
根据IMAP的文档:
IMAP4的邮件编号会随着邮箱的变化而改变;特别是在执行了EXPUNGE命令删除邮件后,剩下的邮件会重新编号。因此,强烈建议使用UID(唯一标识符),通过UID命令来操作。
在StackOverflow上的讨论:关于使用imaplib的IMAP UID
IMAP4.fetch(message_set, 'UID')
使用Fetch是获取邮件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