簡體   English   中英

解析電子郵件字段

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM