来自RFC 1036、822:
为了符合 RFC-822,Message-ID 必须具有以下格式:<unique@full_domain_name>
因此,实际的消息 ID 将介于 < 和 > 之间。域部分是 ID 的一部分。
我可能会剥离字符串,然后在<字符上拆分,验证它以>结尾,然后将其切断。
我真的无法用你的数据找到一个好的解决方案(最后有错字吗?),但如果看起来像下面这样,我会像这样解析它
# Note: my list does not end with , ")"]
messageparts = [('1 (BODY[HEADER.FIELDS (MESSAGE-ID)] {78}',
'Message-ID: <actualmessageid@mail.mail.gmail.com>\r\n\r\n')]
for envelope, data in messageparts:
# data: the part with Message-ID in it
# data.strip(): Newlines removed
# .split("<"): Break in 2 parts, left of < and right of <. Removes <
# .rstrip(">") remove > from the end of the line until there is
# no > there anymore;
# "x>>>".rstrip() -> "x"
print "The message ID is: ", data.strip().split("<")[1].rstrip(">")
# Short alternative version:
messageids = [data.strip().split("<")[1].rstrip(">") \
for env,data in messageparts]
print messageids
输出:
The message ID is: actualmessageid@mail.mail.gmail.com
['actualmessageid@mail.mail.gmail.com']
我使用 '\' 拆分了一些行以使其在此处更具可读性,并且代码假定标题都是有效的。