Разбор нескольких «To:» из необработанной электронной почты в Python - PullRequest
0 голосов
/ 04 января 2019

Я использую модуль email с Python3.7 для разбора необработанной электронной почты.

Значением поля To: является строка

import email
msg = email.message_from_file(fh)
print(msg.get('To')) 
#---> "name a" <aaa@email.com>,\n "name b"\n\t<bbbb@email.com>

Какой самый простой и надежный способ получить список To: адресов, таких как:

["aaa@email.com", "bbbb@email.com"]

Ответы [ 2 ]

0 голосов
/ 22 марта 2019

Письма в Python хранятся в структуре данных, похожей на мультидикт с ключами без учета регистра. Адреса получателей хранятся в названном поле заголовка "to".

Итак, самый простой способ - использовать EmailMessage.get_all():

>>> msg.get_all("to")
["aaa@email.com", "bbbb@email.com"]

Это базовое использование предполагает, что сообщение электронной почты было правильно проанализировано с самого начала . Вывод, показанный в вопросе OP, предполагает, что у них ранее была проблема (поврежденный формат входных данных), потому что электронная почта из файла не была правильно проанализирована.

0 голосов
/ 04 января 2019

Вы можете использовать email.utils.getaddresses на msg.get('To') ... например:

to_list = msg.get('To')
emails = email.utils.getaddresses([to_list])

Даст вам (учитывая ваш пример) 2 кортежа:

[('name a', 'aaa@email.com'), ('name b', 'bbbb@email.com')]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...