Как получить 'Message-ID', используя imaplib - PullRequest
5 голосов
/ 23 сентября 2010

Я пытаюсь получить уникальный идентификатор, который не изменяется во время работы.Я думаю, что UID это не хорошо.Поэтому я думаю, что «Message-ID» - это правильно, но я не знаю, как его получить.Я знаю только imap.fetch (uid, 'XXXX'), у кого-нибудь есть решение?.

Ответы [ 4 ]

7 голосов
/ 23 сентября 2010

Из самой документации IMAP:

Номера сообщений IMAP4 меняются при изменении почтового ящика;в частности, после того, как команда EXPUNGE выполнит удаление, остальные сообщения перенумеровываются.Поэтому настоятельно рекомендуется вместо этого использовать UID с командой UID.

Обсуждение на SO: Об IMAP UID с imaplib

IMAP4.fetch(message_set, 'UID')

Выборка - лучший способчтобы получить UID сообщения

И чтобы получить идентификатор сообщения, вы можете сделать что-то вроде этого, хотя не все сообщения могут иметь идентификатор сообщения.

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
4 голосов
/ 23 сентября 2010

Вы можете попробовать этот код 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 голосов
/ 24 сентября 2015
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 голосов
/ 21 апреля 2014

Существует гораздо более простой способ для этого ...

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

Надеюсь, это поможет!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...