Определите уникальные "от" адреса электронной почты в папке Maildir

Я хочу узнать список адресов "From" в папке Maildir. Используя следующий скрипт, он иллюстрирует различные форматы, которые действительны в From:

import mailbox

mbox = mailbox.Maildir("/home/paul/Maildir/.folder") 
for message in mbox:
    print message["from"]

"John Smith" <jsmith@domain.com>
Tony <tony@domain2.com>
brendang@domain.net

Все, что мне нужно, это адрес электронной почты для любого допустимого (или общего) формата поля "От:". Должно быть, это было решено несколько миллионов раз раньше, поэтому я ожидал библиотеку. Все, что я могу найти, это различные регулярные выражения.

Есть ли стандартный подход?

1 ответ

Решение

email.utils.parseaddr ваш друг:

>>> emails = """"John Smith" <jsmith@domain.com>
Tony <tony@domain2.com>
brendang@domain.net"""
>>> lines = emails.splitlines()
>>> from email.utils import parseaddr
>>> [parseaddr(email)[1] for email in lines]
['jsmith@domain.com', 'tony@domain2.com', 'brendang@domain.net']

Так что вы должны просто иметь возможность работать с:

for message in mbox:
    print parseaddr(message['from'])

Тогда, я думаю, если вы просто хотите уникальные адреса электронной почты, то вы можете просто использовать set прямо над mboxНапример:

mbox = mailbox.MailDir('/some/path')
uniq_emails = set(parseaddr(email['from'])[1] for email in mbox)
Другие вопросы по тегам