如何确定是否通过imap base64编码邮件获取?

问题描述:

我救了整个消息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

电子邮件。然而,你最有可能使用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