如何确定是否通过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
电子邮件。然而,你最有可能使用MIME /多部分消息处理(在同一消息中如文字/平原和HTML ),在这种情况下,传输编码是针对每个部件单独设置的,您可以使用is_multipart()
或Content-Type
为multipart/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
是的,我打印'内容类型'字段,它显示“multipart/alternative”或多部分/混合,我会尝试walk() – user1177284 2012-02-02 09:03:42
我可以解码有效载荷,但解码后很难构建邮件,任何建议? – user1177284 2012-02-02 11:01:41
这几乎取决于内容是什么,你可以尝试编码为[引用打印](http://docs.python.org/library/quopri.html)并更改内容传输编码。 – ext 2012-02-02 11:11:03
但是,为什么你需要测试这个?只需保存消息,如果您解码base64,则可能无法在以后打开保存的文件。我的意思是,即使使用BASE64,您的.eml文件也应该可以很好地工作。 – ext 2012-02-02 07:50:32
我的.eml文件不能正常工作..,邮件的正文不可读。(由outlook express打开) – user1177284 2012-02-02 09:00:40
您明白了,解码后很难构建邮件。那么我怎样才能将整个消息保存为xxx.eml并且所有可读的单词? – user1177284 2012-02-02 11:00:02