[英]How to determine if a mail fetch by imap base64 encoded?
我将整个消息另存为xx.eml,但是一些邮件正文告诉邮件第一行使用base64进行编码,例如:
charset="utf-8" Content-Transfer-Encoding: base64
charset="gb2312" Content-Transfer-Encoding: base64
我试图获取body[0][1]
的键,但是没有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
内容类型:文本/纯文本;
charset =“ utf-8”
内容传输编码:base64
当我的程序保存.eml文件时,它在'text / plain'之后更改行;
因此,如果我将行编辑为““ Content-Type:text / html; charset =” utf-8“”,Outlook Express无法解析邮件,
有用
现在的问题是:如何编辑程序以使其不更改行?
传输为BASE64的电子邮件必须设置Content-Transfer-Encoding
。 但是,您最有可能处理MIME / Multipart消息(例如,同一消息中的文本/纯文本和HTML),在这种情况下,将为每个部分分别设置传输编码。 您可以使用is_multipart()
或Content-Type
是否为multipart/alternative
。 如果是这种情况,则可以使用walk遍历不同的部分。
编辑:使用带引号的可打印文本和纯文本以及使用BASE64的HTML发送文本/纯文本是很正常的。
Content-Type: multipart/alternative; boundary="=_d6644db1a848db3cb25f2a8973539487"
Subject: multipart sample
From: Foo Bar <foo@example.net>
To: Fred Flintstone <fred@example.net>
--=_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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.