加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

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

发布时间:2020-12-20 11:17:32 所属栏目:Python 来源:网络整理
导读:我正在通过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
我正在通过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>rnrn'),')']

我将如何解析实际的消息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}',')']

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

>>> header_string
'Message-ID: <actualmessageid@mail.mail.gmail.com>rnrn'

>>> 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}',')']


print(get_id(response))

收益:

actualmessageid@mail.mail.gmail.com

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读