Python解析邮件

栏目: Python · 发布时间: 6年前

内容简介:邮件的解析是个大课题,远超一般人的预期。它远比发送邮件和接收邮件要复杂的多的多。发送邮件好说,接收和下载邮件也好说。关键是下载下来的邮件是一种比HTML还复杂的嵌套结构先不论Python,也不谈什么邮件发展历史,只论现在:

邮件的解析是个大课题,远超一般人的预期。它远比发送邮件和接收邮件要复杂的多的多。

发送邮件好说,接收和下载邮件也好说。关键是下载下来的邮件是一种比HTML还复杂的嵌套结构

MIME邮件协议

先不论Python,也不谈什么邮件发展历史,只论现在:

现在我们要达到通过编程来解析邮件,就绝对避不开这个问题: MIME邮件结构 .

MIME是一整套的协议,就像HTTP协议、TCP协议之类的一样,都是解析邮件的一套规则。

所以我们想要解析一封邮件(把它拆成人能读懂的标题、收发件人、内容、附件等),就必须得理解这套协议。

就算有现成的 Python 处理库也一样要懂了以后才能开始操作。

了解MIME协议,其实主要就是了解 邮件的嵌套结构 。这个懂了就全懂了。

要知道,我们收到的一封邮件可能是以下这几种不同的结构类型:

  • 简单的几句话,全是文字。 (text/plain)
  • 非常漂亮的网页一样的页面。 (text/html)
  • 包括回复另一封邮件的层层嵌套的内容。 (multipart/mixed)
  • 带附件的内容,比如一张图片。 (multipart/mixed) + (image/jpeg)

当然,这不是全部,只是有代表性的几种文档类型。最重要的是知道:

所有超出简单文字或网页HTML之外的,全都是 multiparts

最难理解的也是这个multiparts。

下面是最复杂的Multiparts邮件,包括了所有能包括的结构。其中每个 方块 都有自己的 Content TypeBody

简单点的结构图:

[站外图片上传中...(image-8219fc-1548158814349)]

文字型结构图:

multipart/mixed
 |
 +-- multipart/related
 |    |
 |    +-- multipart/alternative
 |    |    |
 |    |    +-- text/plain
 |    |    +-- text/html
 |    |      
 |    +-- image/gif
 |
 +-- application/msword

详细一点的结构图:

[站外图片上传中...(image-36fdd8-1548158814349)]

这里是所有邮件能支持的 Content Type 文档类型:

text/plain
text/html
image/jpeg
image/gif
audio/x-wave
audio/mpeg
video/mpeg
application/zip

编程上需要明确的是: 要读取嵌套结构,必须用递归的方法。

Content-Disposition 附件的存在方式

对于附件,有两种存在方式:

inline
attachment

一般我们只需要处理attachment格式的附件,而inline的东西就让它保存在inline里吧。

邮件里面要获取这个部分的格式,需要找到这个参数: Content-Disposition 。其它并拍的参数还要 Content-TypeContent-ID 等。

Content-Transfer-Encoding 文本传输的编码方式

这个只针对 text/plain & text/html 类型的文本有用。

这个是每封邮件的必须数据,它必须要指出每段文本的 传输编码方式 ,有的可以压缩传输(base64),有的可以原文传输(8bit或7bit),有的可以内置base64图片可直接打印(quoted-printable)。

正因为每封邮件都可能采用不同的传输编码策略,所以我们解析内容之前必须要判断是哪种方式才能正确解码为原文的内容。

目前常见的传输编码方式有:

  • 8bit7bit :这个最简单,直接是原文,不需要转码。
  • base64 :内容 全文 用base64压缩,所以需要用 base64.b64decode() 库函数来解码。
  • quoted-printable :另一种压缩方式,需要用 quopri.decodestring() 库函数来解码。

获取当前内容的传输编码方式的代码如下:

encoding = part.get('Content-Transfer-Encoding')

其中 part 可以是库 email.message.Message 的实例或者其中multipart多部分中的sub-part,都可以。


以上所述就是小编给大家介绍的《Python解析邮件》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

众妙之门

众妙之门

Smashing Magazine / 腾讯ISUX社交用户体验设计部 / 人民邮电出版社 / 2013-4 / 59.00元

《众妙之门——网站重新设计之道》是一本精彩、实用的网站UI设计宝典,其中的文章来自于世界知名WEB设计与开发博客Smashing Magazine。全书内容丰富,包括:网站重新设计的商业思考,HTML5与CSS3,重新认识JavaScript,构建更优用户体验的技术,移 动用户体验设计,等等。这些都是目前业内热度最高、从业人员最想了解的话题。无论是设计师还是开发人员,无论水平是高还是低,读者都能从......一起来看看 《众妙之门》 这本书的介绍吧!

HTML 压缩/解压工具
HTML 压缩/解压工具

在线压缩/解压 HTML 代码

在线进制转换器
在线进制转换器

各进制数互转换器