我正在通过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