2009-04-24 21 views
7

用get_payload感到奇怪:當它看到它正在解碼的消息中有一個等號時,它似乎會變成垃圾。下面是顯示錯誤代碼:Python:電子郵件get_payload解碼等於打等號時失敗?

import email 

data = file('testmessage.txt').read() 
msg = email.message_from_string(data) 
payload = msg.get_payload(decode=True) 
print payload 

下面是一個示例消息:test message

該消息只打印到第一個「=」。其餘的被省略。任何人都知道發生了什麼事?

與「decode = False」相同的腳本返回完整的消息,所以它看起來解碼不等於等號。

這是在Python 2.5下。

回答

6

你有一個行結束的問題。您的測試消息正文使用裸回車符(\ r),不帶換行符(\ n)。如果在解析電子郵件之前修復了行結尾,它將全部正常工作:

import email, re 
data = file('testmessage.txt').read() 
data = re.sub(r'\r(?!\n)', '\r\n', data) # Bare \r becomes \r\n 
msg = email.message_from_string(data) 
payload = msg.get_payload(decode=True) 
print payload 
+0

感謝Richie,這很有效。但是,我也會處理不是文本的附件,所以我可能不想不加區分地進行重新替換。我需要檢測文本/純文本,然後只進行替換,這有點微妙,因爲當我看到消息部分的MIME類型時,我已經經過了message_from_string調用。 是否可以在get_payload調用之外單獨調用decode? – Parand 2009-04-24 22:33:19