确定Maildir文件夹中唯一的“发件人”邮箱地址
我想找出一个Maildir文件夹里所有的“发件人”地址。用下面这个脚本,可以展示出“发件人”字段的不同格式:
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 个回答
6
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'])
然后,我想如果你只是想要唯一的邮箱地址,那你可以直接在 mbox
上使用一个 set
,比如:
mbox = mailbox.MailDir('/some/path')
uniq_emails = set(parseaddr(email['from'])[1] for email in mbox)