[英]Parse email fields
我想從To:
電子郵件字段解析電子郵件地址。
確實,當循環播放 mbox 中的電子郵件時:
mbox = mailbox.mbox('test.mbox')
for m in mbox:
print m['To']
我們可以得到類似的東西:
info@test.org, Blahblah <blah@test.com>, <another@blah.org>, "Hey" <last@one.com>
應該被解析為:
[{email: "info@test.org", name: ""},
{email: "blah@test.com", name: "Blahblah"},
{email: "another@blah.org", name: ""},
{email: "last@one.com", name: "Hey"}]
是否已經為此內置了一些東西(在mailbox
或另一個模塊中)或什么都沒有?
我讀了幾次這個文檔,但我沒有找到相關的東西。
您可以email.utils.getaddresses()
使用email.utils.getaddresses()
:
>>> getaddresses(['info@test.org, Blahblah <blah@test.com>, <another@blah.org>, "Hey" <last@one.com>'])
[('', 'info@test.org'), ('Blahblah', 'blah@test.com'), ('', 'another@blah.org'), ('Hey', 'last@one.com')]
(請注意,該函數需要一個列表,因此您必須將字符串括在[...]
。)
email.parser
有你正在尋找的模塊。 email.message
仍然相關,因為解析器將使用此結構返回消息,因此您將從中獲取標題數據。 但要真正讀取文件, email.parser
是要走的路。
正如@TheSpooniest 所指出的, email
有一個解析器:
import email
s = 'info@test.org, Blahblah <blah@test.com>, <another@blah.org>, "Hey" <last@one.com>'
for em in s.split(','):
print email.utils.parseaddr(em)
給出:
('', 'info@test.org')
('Blahblah', 'blah@test.com')
('', 'another@blah.org')
('Hey', 'last@one.com')
Python 提供了email.Header.decode_header()用於解碼頭部。 該函數解碼每個原子並返回一個元組列表(文本,編碼),您仍然需要解碼並加入以獲得全文。
對於地址,Python 提供email.utils.getaddresses()將地址拆分為元組列表( display-name, address )。 display-name 也需要解碼,地址必須符合 RFC2822 語法。 函數getmailaddresses()完成所有工作。
這是一個可能有助於http://blog.magiksys.net/parsing-email-using-python-header的教程
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.