2011-07-26 30 views
1

我解析與Python的郵箱文件,並偶然發現了一個奇怪的behvior試圖讓所有的「要:」當標題與get_all()Python的電子郵件標題解析get_all()

tos = message.get_all('to', []) 
if tos: 
    tos = getaddresses(tos) 
    for to in tos: 
     receiver = EmailInformant() 
     receiver_email = to[1] 

get_all()得到所有「到: 「值,用逗號隔開,afaik。然後getaddresses將單個接收器分成名稱和電子郵件值。 對於以下「爲:」頭,這是行不通的,因爲我所期望的:

To: [email protected] <[email protected]> 

這裏,電子郵件地址提供姓名和電子郵件值,但是解析器將這種情況視爲兩個獨立的「爲: 「條目,運行for-loop兩次。這是一個錯誤?

回答

0

解析電子郵件非常困難,因爲有幾種不同的規格,很多定義或定義不明的行爲,以及不遵循規範的實現。他們中的許多人在某些方面有衝突。

我知道標準庫中的電子郵件模塊目前正在爲Python 3.3重寫,請參閱http://www.bitdance.com/blog/。重寫應該解決這樣的問題;如果您有以下選項,它現在可用於Python 3.2的pypi:http://pypi.python.org/pypi/email

同時,請嘗試tos = set(getaddresses(tos))以消除重複項。

+0

我的解決方法不如您的優雅,謝謝!我會密切關注你提到的博客,非常翔實。 你認爲這個問題值得一個錯誤報告? – Gregor

+0

如果你真的找不到它的提及,是的,但我敢打賭,這是已知的行爲 - 這不是一個電子郵件地址的罕見格式。 – agf