python – 解析imaplib返回的Message-ID标头

我正在通过IMAP从Gmail中的电子邮件中获取messageid.

这段代码:

messageid = m.fetch(num, '(BODY[HEADER.FIELDS (MESSAGE-ID)])')
print messageid

返回:

[('1 (BODY[HEADER.FIELDS (MESSAGE-ID)] {78}', 'Message-ID: <actualmessageid@mail.mail.gmail.com>\r\n\r\n'), ')']

我将如何解析实际的消息ID?

最佳答案 您也可以使用
email module
HeaderParser.parsestr() function(与Parser相同的API,但不担心电子邮件的正文)和
parseaddr() function来实现您的目标.

>>> from email.parser import HeaderParser
>>> from email.utils import parseaddr

>>> hp = HeaderParser()

>>> response = [('1 (BODY[HEADER.FIELDS (MESSAGE-ID)] {78}',
                 'Message-ID: <actualmessageid@mail.mail.gmail.com>\r\n\r\n'), ')']

>>> header_string = response[0][1]

>>> header_string
'Message-ID: <actualmessageid@mail.mail.gmail.com>\r\n\r\n'

>>> header = hp.parsestr(header_string)

>>> header
<email.message.Message instance at 0x023A6198>

>>> header['message-id']
'<actualmessageid@mail.mail.gmail.com>'

>>> msg_id = parseaddr(header['message-id'])

>>> msg_id
('', 'actualmessageid@mail.mail.gmail.com')

>>> msg_id[1]
'actualmessageid@mail.mail.gmail.com'

从而:

from email.parser import HeaderParser
from email.utils import parseaddr

hp = HeaderParser()

def get_id(response):
    header_string = response[0][1]
    header = hp.parsestr(header_string)
    return parseaddr(header['message-id'])[1]

response = [('1 (BODY[HEADER.FIELDS (MESSAGE-ID)] {78}',
             'Message-ID: <actualmessageid@mail.mail.gmail.com>\r\n\r\n'), ')']


print(get_id(response))

收益:

actualmessageid@mail.mail.gmail.com
点赞