首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何判断邮件抓取是否采用imap base64编码?

如何判断邮件抓取是否采用imap base64编码?
EN

Stack Overflow用户
提问于 2012-02-02 15:03:38
回答 1查看 3.8K关注 0票数 1

我将整个消息保存为xx.eml,但一些邮件正文在第一行显示邮件是由base64编码的,例如:

代码语言:javascript
复制
charset="utf-8" Content-Transfer-Encoding: base64   
charset="gb2312" Content-Transfer-Encoding: base64     

我试图获取body[0][1]的密钥,但没有content-transfer-encoding字段(只有content-type)。

我如何处理这些邮件?

代码语言:javascript
复制
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()

我找到问题了,不是解码的问题。

正确的邮件如下:

代码语言:javascript
复制
 ------=\_Part\_446950\_1309705579.1326378953207
代码语言:javascript
复制
 Content-Type: text/plain; charset=GBK
代码语言:javascript
复制
 Content-Transfer-Encoding: base64

我的程序下载内容:

代码语言:javascript
复制
 ------=\_Part\_446950\_1309705579.1326378953207
代码语言:javascript
复制
 Content-Type: text/plain;
代码语言:javascript
复制
   charset="utf-8"
代码语言:javascript
复制
 Content-Transfer-Encoding: base64

当我的程序保存文本文件时,它会在“.eml /;”之后更改行。

因此,如果我将行编辑为""Content-Type: text/html;charset="utf-8"",

它起作用了

现在的问题是:如何编辑我的程序而不让它改变行?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-02-02 15:29:39

作为BASE64传输的电子邮件必须设置Content-Transfer-Encoding。然而,您最有可能处理的是MIME/多部分邮件(例如,在同一邮件中同时包含文本/纯文本和HTML ),在这种情况下,传输编码是分别为每个部分设置的。您可以使用is_multipart()Content-Type是否为multipart/alternative进行测试。如果是这种情况,您可以使用walk遍历不同的部分。

编辑:使用quoted-printable发送文本/纯文本和使用BASE64发送HTML是很正常的。

代码语言:javascript
复制
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
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9108358

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档