С RFC 1036, 822 :
Чтобы соответствовать RFC-822,
Идентификатор сообщения должен иметь формат:
<Уникальный @ full_domain_name>
Таким образом, фактический идентификатор сообщения будет находиться между <и> часть домена является частью идентификатора.
Я бы, вероятно, выделил строку, затем split на символе <</em>, проверил, что он заканчивается на > , а затем вырезал это выключено.
Я не могу действительно найти хорошее решение с вашими данными (в конце есть опечатка?), Но если бы это выглядело следующим образом, я бы проанализировал это примерно так
# 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']
Я разделил некоторые строки, используя '\', чтобы сделать его немного более читабельным, и код предполагает, что все заголовки действительны.