繁体   English   中英

如何确定imap base64提取的邮件是否编码?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM