【发布时间】:2012-02-24 20:57:14
【问题描述】:
我将整封邮件保存为 xx.eml,但有些邮件正文在第一行告诉邮件是用 base64 编码的,例如:
charset="utf-8" Content-Transfer-Encoding: base64
charset="gb2312" Content-Transfer-Encoding: base64
我尝试获取body[0][1]的key,但是没有content-transfer-encoding字段(只有content-type)。
如何处理这些邮件?
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
内容类型:文本/纯文本;字符集=GBK
内容传输编码:base64
我的程序下载什么:
------=_Part_446950_1309705579.1326378953207
内容类型:文本/纯文本;
字符集="utf-8"
内容传输编码:base64
当我的程序保存 .eml 文件时,它会在 'text/plain;' 之后更改行
因此outlook express 无法解析邮件
如果我将行编辑为 ""Content-Type: text/html;charset="utf-8"",
它的工作原理
现在的问题是:如何编辑我的程序不让它换行?
【问题讨论】:
-
但是你为什么需要对此进行测试呢?只需按原样保存消息,如果您对 base64 进行解码,则以后可能无法打开保存的文件。我的意思是,即使使用 BASE64,您的 .eml 文件也应该可以正常工作。
-
我的 .eml 文件无法正常工作..,邮件正文不可读。(由 Outlook Express 打开)
-
你明白了,解码后很难构造邮件。那么如何将整个消息保存为 xxx.eml 以及所有可读的单词?
-
尝试使用不同的email.generator.Generator
maxheaderlen。