Как вы извлекаете несколько адресов электронной почты из заголовка почты RFC 2822 в python?

Модуль Python email отлично подходит для разбора заголовков. Однако у заголовка To: может быть несколько получателей, и может быть несколько заголовков To:. Итак, как мне разделить каждый из адресов электронной почты? Я не могу разделить запятую, так как запятую можно поставить в кавычки. Есть ли способ сделать это?

Демонстрационный код:

msg="""To: [email protected], "User Two" <[email protected]", "Three, User <[email protected]>                               
From: [email protected]                                                                                                      
Subject: This is a subject                                                                                                      

This is the message.                                                                                                            
"""

import email

msg822 = email.message_from_string(msg)
for to in msg822.get_all("To"):
    print("To:",to)

Текущий выход:

$ python x.py
To: [email protected], "User Two" <[email protected]", "Three, User <[email protected]>
$ 

person vy32    schedule 03.11.2015    source источник
comment
Какой результат вы хотите?   -  person Robᵩ    schedule 04.11.2015
comment
Вероятно, вам следует использовать shlex & Co.. MDA разделяют строки адреса запятыми (без кавычек).   -  person user3159253    schedule 04.11.2015
comment
связанные: docs.python.org/2/library/   -  person Robᵩ    schedule 04.11.2015


Ответы (1)


Пропустите все строки To через email.utils.getaddresses():

msg="""To: [email protected], John Doe <[email protected]>, "Public, John Q." <[email protected]>
From: [email protected]
Subject: This is a subject

This is the message.
"""

import email

msg822 = email.message_from_string(msg)
for to in email.utils.getaddresses(msg822.get_all("To", [])):
    print("To:",to)

Обратите внимание, что я переписал вашу строку To. Я считаю, что ваш пример не был допустимым форматом.

Ссылка: https://docs.python.org/3/library/email.utils.html#email.utils.getaddresses

person Robᵩ    schedule 04.11.2015
comment
Идеальный. Я читал документы, но я просто не мог найти то, что искал. Спасибо! - person vy32; 04.11.2015
comment
Ссылка для Python 3: docs.python.org/3 /библиотека/ - person Neara; 17.09.2020
comment
@Neara - Спасибо. Обновлено. - person Robᵩ; 30.09.2020