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

这就是为什么网上中文外文搜邮件的问题,绝大多数都是讲发送的而讲接收的很少。

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

MIME邮件协议

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

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

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

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

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

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

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

简单的几句话,全是文字。 (text/plain)

非常漂亮的网页一样的页面。(text/html)

包括回复另一封邮件的层层嵌套的内容。(multipart/mixed)

带附件的内容,比如一张图片。(multipart/mixed) + (image/jpeg)

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

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

最难理解的也是这个multiparts。

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

简单点的结构图:

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

文字型结构图:

multipart/mixed

|

+-- multipart/related

| |

| +-- multipart/alternative

| | |

| | +-- text/plain

| | +-- text/html

| |

| +-- image/gif

|

+-- application/msword

详细一点的结构图:

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

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

text/plain: 纯文本,文件扩展名.txt

text/html: HTML文本,文件扩展名.htm和.html

image/jpeg: jpeg格式的图片,文件扩展名.jpg

image/gif: GIF格式的图片,文件扩展名.gif

audio/x-wave: WAVE格式的音频,文件扩展名.wav

audio/mpeg: MP3格式的音频,文件扩展名.mp3

video/mpeg: MPEG格式的视频,文件扩展名.mpg

application/zip: PK-ZIP格式的压缩文件,文件扩展名.zip

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

Content-Disposition 附件的存在方式

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

inline: 嵌入在文字里的,比如HTML格式邮件中显示的图片

attachment: 是附在结尾的,单独的一部分

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

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

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

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

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

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

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

8bit或7bit:这个最简单,直接是原文,不需要转码。

base64:内容全文用base64压缩,所以需要用base64.b64decode()库函数来解码。

quoted-printable:另一种压缩方式,需要用quopri.decodestring()库函数来解码。

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

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

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

python 邮件解析_Python解析邮件相关推荐

  1. python获取邮件内容_python 接收邮件获取邮件内容

    收取邮件有两种协议,POP3和IMAP,POP3相对于IMAP功能较少无法对邮件进行更深层次的操作,因此本文使用IMAP协议收取邮件.python提供了很多收邮件的模块,本文使用imaplib来接收邮 ...

  2. python爬取邮件内容_python 接收邮件获取邮件内容

    收取邮件有两种协议,POP3和IMAP,POP3相对于IMAP功能较少无法对邮件进行更深层次的操作,因此本文使用IMAP协议收取邮件.python提供了很多收邮件的模块,本文使用imaplib来接收邮 ...

  3. python邮件模块_Python收发邮件模块,用,来,发送,接收

    用Python来发送接收邮件模块 python实现发送和接收邮件功能主要用到poplib和smtplib模块. poplib用于接收邮件,而smtplib负责发送邮件. # -- coding :ut ...

  4. python 读取邮件内容_python获取邮件内容(邮件内容为html)

    用python获取邮件内容比较简单,直接用现成的imap和pop3包即可,但是有时候邮件的内容不是plainText而是html甚至是一个url链接,原本的操作流程是点击url获取内容(比如csv等等 ...

  5. python命令解析_python解析命令行

    可以解析这样的命令 ./cron_ctrl jobname1 --stop ;./cron_ctrl jobname1 --start;./cron_ctrl jobname1 --list #!/u ...

  6. python发邮件实例_python 发邮件实例

    1 importsmtplib2 from email.mime.multipart importMIMEMultipart3 from email.mime.text importMIMEText4 ...

  7. python xml字符串_python -解析字符串,并返回xml格式字符串 急该如何解决

    python --解析字符串,并返回xml格式字符串 急急急. str = """Registrations: ============================= ...

  8. python pyquery库_python解析HTML之:PyQuery库的介绍与使用

    前言 Python关于爬虫的库挺多的,也各有所长.了解前端的也都知道, jQuery 能够通过选择器精确定位 DOM 树中的目标并进行操作,所以我想如果能用 jQuery 去爬网页那就 cool 了. ...

  9. python邮件发送_Python实现邮件发送

    使用smtplib模块发送邮件,它对smtp协议进行了简单的封装. smtp协议的基本命令包括: HELO 向服务器标识用户身份 MAIL 初始化邮件传输 mail from: RCPT 标识单个的邮 ...

最新文章

  1. linux Makefile 中使用 shell命令
  2. 动物统计加强版(贪心,字典序)
  3. 从5随机到7随机及其扩展
  4. STM32开发 -- 低功耗模式详解(3)
  5. c++类对象的创建方式
  6. java smack 例子_java+smack+openfire即时通讯Im(四)
  7. 邮箱smtpserver及port收集
  8. php原始 实现双向队列,用PHP实现一个双向队列
  9. java JDBC编程
  10. java 聊天室 私聊_使用socket实现网络聊天室和私聊功能
  11. python同时含有大写小写_如何使python同时加密大写和小写?
  12. 1、学生如何购买云服务器、域名(系列:个人博客搭建)
  13. tipask二次开发总结_测试经验总结(“二次开发”)
  14. 第三届厦门国际银行数创金融杯金融营销建模大赛-BaseLine
  15. 支持生僻字且自动识别utf-8编码的php汉字转拼音类,支持生僻字且自动识别utf-8编码的php汉字转拼音类_PHP...
  16. 【项目数据优化一】敏感数据脱敏处理
  17. html清除js设置的浮动,css 怎么清除浮动
  18. Ubuntu18.04系统的安装及使用,不能开机,输入法不对等
  19. android 录音amr格式转换,android – 以AMR文件格式录制音频
  20. 华为OD机试真题 Java 实现【跳房子II】【2023 B卷 100分】,附详细解题思路

热门文章

  1. 《操作系统 》 操作系统概述 (一)
  2. L2tp 虚拟专有网络 (预共享密钥)
  3. Spark面试题——常问
  4. MacBook的Word使用Zotero时出现整合错误
  5. 【大二Web课程设计】基于HTML+CSS技术制作抗疫感动专题网页设计
  6. PCB设计铜铂厚度、线宽和电流关系
  7. 16.隐函数及参数方程所确定的函数求导
  8. wordpress 博客cms 主题搭建
  9. 笔试面试(IQ题集)
  10. 微信能修图!美图秀秀们惊恐之后该怎么做