确定Maildir文件夹中唯一的“发件人”邮箱地址

1 投票
1 回答
908 浏览
提问于 2025-04-17 16:03

我想找出一个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)

撰写回答