email.utils.parseaddr is your friend:
>>> 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']
So you should just be able to work with:
for message in mbox:
print parseaddr(message['from'])
Then, I guess if you just want unique email addresses, then you can just use a set
directly over mbox
, eg:
mbox = mailbox.MailDir('/some/path')
uniq_emails = set(parseaddr(email['from'])[1] for email in mbox)