2015-04-14 2 views
1

Я хочу проанализировать адреса электронной почты из поля электронной почты To:.Parse поля электронной почты

В самом деле, когда зацикливание на электронные письма в Mbox:

mbox = mailbox.mbox('test.mbox') 
for m in mbox: 
    print m['To'] 

мы можем получить такие вещи, как:

, которые должны быть проанализированы в:

[{email: "[email protected]", name: ""}, 
{email: "[email protected]", name: "Blahblah"}, 
{email: "[email protected]", name: ""}, 
{email: "[email protected]", name: "Hey"}] 

Есть что-то уже встроенное (в mailbox или другом модуле) для этого или ничего?

Я читал несколько раз this doc, но я не нашел что-то актуальное.

ответ

2

Вы можете использовать email.utils.getaddresses() для этого:

>>> getaddresses(['[email protected], Blahblah <[email protected]>, <[email protected]>, "Hey" <[email protected]>']) 
[('', '[email protected]'), ('Blahblah', '[email protected]'), ('', '[email protected]'), ('Hey', '[email protected]')] 

(Обратите внимание, что функция ожидает список, так что вы должны заключить строку в [...].)

1

email.parser имеет модули, которые вы ищете. email.message по-прежнему актуально, потому что парсер будет возвращать сообщения, используя эту структуру, поэтому вы получите данные заголовка. Но на самом деле читал файлы, email.parser - это путь.

+0

Как 'email.parser' анализирует содержимое заголовка' To'? –

1

Как указано на @TheSpooniest, email имеет анализатор:

import email 

s = '[email protected], Blahblah <[email protected]>, <[email protected]>, "Hey" <[email protected]>' 

for em in s.split(','): 
    print email.utils.parseaddr(em) 

дает:

('', '[email protected]') 
('Blahblah', '[email protected]') 
('', '[email protected]') 
('Hey', '[email protected]') 
+1

Это не работает, когда имя или адрес электронной почты имеют запятую: «Пример, Джон» '. – Boldewyn

+0

Oh right @Boldewyn – Basj

0

Python предоставляет email.Header.decode_header() для декодирования заголовка. Функция декодирует каждый атом и возвращает список кортежей (текст, кодирование), которые все еще нужно декодировать и присоединяться, чтобы получить полный текст.

Для адресов Python предоставляет email.utils.getaddresses(), которые разделяют адреса в списке кортежей (отображаемое имя, адрес). необходимо также декодировать имя-образ, и адреса должны соответствовать синтаксису RFC2822. Функция getmailaddresses() выполняет всю работу.

Вот учебник, который может помочь http://blog.magiksys.net/parsing-email-using-python-header

Смежные вопросы