我将整个消息保存为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 Content-Type: text/plain; charset=GBK Content-Transfer-Encoding: base64我的程序下载内容:
------=\_Part\_446950\_1309705579.1326378953207 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64当我的程序保存文本文件时,它会在“.eml /;”之后更改行。
因此,如果我将行编辑为""Content-Type: text/html;charset="utf-8"",
它起作用了
现在的问题是:如何编辑我的程序而不让它改变行?
发布于 2012-02-02 15:29:39
作为BASE64传输的电子邮件必须设置Content-Transfer-Encoding。然而,您最有可能处理的是MIME/多部分邮件(例如,在同一邮件中同时包含文本/纯文本和HTML ),在这种情况下,传输编码是分别为每个部分设置的。您可以使用is_multipart()或Content-Type是否为multipart/alternative进行测试。如果是这种情况,您可以使用walk遍历不同的部分。
编辑:使用quoted-printable发送文本/纯文本和使用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 HEREhttps://stackoverflow.com/questions/9108358
复制相似问题