2012-02-02 72 views
1

我救了整個消息xx.eml,但有些郵件的身體告訴該郵件是base64編碼在第一行,例如:如何確定是否通過imap base64編碼郵件獲取?

charset="utf-8" Content-Transfer-Encoding: base64 
charset="gb2312" Content-Transfer-Encoding: base64  

我試圖得到的body[0][1]的鑰匙,但有沒有內容傳輸編碼字段(僅限內容類型)。

我該如何處理郵件?

def saveMail(conn, num): 

    typ, body = conn.fetch(num, 'RFC822') 

    message = open(emldirPath + '\\' + num + '.eml', 'w+') 
    message.write(str(email.message_from_string(body[0][1]))) 

    print email.message_from_string(body[0][1]).keys() 
    #['Received', 'Return-Path', 'Received', 'Received', 'Date', 'From', 'To', 
    # 'Subject', 'Message-ID', 'X-mailer', 'Mime-Version', 'X-MIMETrack', 
    # 'Content-Type', 'X-Coremail-Antispam'] 

    message.close() 

我發現問題,它不是解碼問題。

正確的郵箱如下:
------ = _ Part_446950_1309705579.1326378953207
的Content-Type:text/plain的;字符集= GBK
內容傳輸編碼:的base64

什麼我的程序下載:
------ = _ Part_446950_1309705579.1326378953207
的Content-Type:text/plain的;
字符集= 「UTF-8」
內容傳輸編碼:BASE64

當我的程序保存.eml文件,將其更改行之後 'text/plain的;'
因此Outlook Express中無法解析的郵件 如果我編輯行 「」 內容類型:text/html的;字符集= 「utf-8」」,
它的工作原理

現在的問題是:如何編輯我的程序不讓它線改變?被轉移爲Base64必須設置Content-Transfer-Encoding

+0

但是,爲什麼你需要測試這個?只需保存消息,如果您解碼base64,則可能無法在以後打開保存的文件。我的意思是,即使使用BASE64,您的.eml文件也應該可以很好地工作。 – ext 2012-02-02 07:50:32

+0

我的.eml文件不能正常工作..,郵件的正文不可讀。(由outlook express打開) – user1177284 2012-02-02 09:00:40

+0

您明白了,解碼後很難構建郵件。那麼我怎樣才能將整個消息保存爲xxx.eml並且所有可讀的單詞? – user1177284 2012-02-02 11:00:02

回答

0

電子郵件。然而,你最有可能使用MIME /多部分消息處理(在同一消息中如文字/平原和HTML ),在這種情況下,傳輸編碼是針對每個部件單獨設置的,您可以使用is_multipart()Content-Typemultipart/alternative進行測試。如果使用這種情況walk來遍歷不同的部分。

編輯:使用quoted-printable和HTML使用BASE64發送文本/純文本是很正常的。

Content-Type: multipart/alternative; boundary="=_d6644db1a848db3cb25f2a8973539487" 
Subject: multipart sample 
From: Foo Bar <[email protected]> 
To: Fred Flintstone <[email protected]> 

--=_d6644db1a848db3cb25f2a8973539487 
Content-Transfer-Encoding: base64 
Content-Type: text/plain; charset=utf-8 

SOME BASE64 HERE 
--=_d6644db1a848db3cb25f2a8973539487 
Content-Transfer-Encoding: base64 
Content-Type: text/html; charset=utf-8 

AND SOME OTHER BASE64 HERE 
+0

是的,我打印'內容類型'字段,它顯示「multipart/alternative」或多部分/混合,我會嘗試walk() – user1177284 2012-02-02 09:03:42

+0

我可以解碼有效載荷,但解碼後很難構建郵件,任何建議? – user1177284 2012-02-02 11:01:41

+0

這幾乎取決於內容是什麼,你可以嘗試編碼爲[引用打印](http://docs.python.org/library/quopri.html)並更改內容傳輸編碼。 – ext 2012-02-02 11:11:03