电子邮件普遍遵循的邮件技术规范。
MIME邮件由邮件头和邮件体两部分组成。
邮件头包括:标题,送信人,收信人,创建日期,邮件体内容类型和邮件体编码方式等内容。
邮件体包括:正文,超文本,内嵌数据和附件等内容。

MIME技术规范的完整内容由RFC 2045-2049定义,包括了信息格式、媒体类型、编码方式等各方面的内容,本文只介绍其中的一些关键的格式和规范。
1.域
MIME邮件中的重要信息都记录在邮件内的各个域中。
域的基本格式是 {域名}:{内容}。
一个域占一行或多行,域的首行左侧不能有空白字符,占多行的域其后续行必须以空白字符开头。
域的信息内容中还可以包含属性,属性之间以“;”分隔,属性格式是{属性名}="{属性值}"。
域的内容的编码格式是"=?"+编码名称+"?"+B/Q+"?"+编码后的字符序列+"?="。(B代表base64的编码方式,Q代表quoted-printable的编码方式)

2.Content-Type域
Content-Type域定义了邮件中各种内容的形式及属性。
Content-Type域的基本格式是 Content-Type:{主类型}/{子类型}。
Content-Type的主类型分text,image,audio,video和application五种离散类型以及multiple和message两种复合类型。
text类型有plain和html两种常用的子类型。
multiple类型有mixed,alternative和related三种常用的子类型。

3.multiple类型
·multiple类型基本格式
multiple类型基本格式是 Content-Type: multipart/{子类型};boundary="{分段标识}"
三种子类型的对比:
------------------------------------------------------------------
|类型名              |邮件种类  |boundary作用                    |
------------------------------------------------------------------
|multiple/mixed      |有附件    |分隔各附件内容和邮件其他内容    |
------------------------------------------------------------------
|multiple/alternative|有超文本  |分隔纯文本,超文本和邮件其他内容|
------------------------------------------------------------------
|multiple/related    |有内嵌资源|分隔各内嵌资源和邮件其他内容    |
------------------------------------------------------------------
·boundary属性
multiple子类型中都定义了各自的boundary属性,邮件中使用boundary中定义的字符串作为标识,将邮件内容分成不同的段,段内每个字段以"--"+boundary中定义的字符串开始,父段则以"--"+boundary中定义的字符串+"--"结束,不同段之间用空行分隔。
·multiple类型的层次关系
------------------------------
|multiple/mixed              |
------------------------------
| |multiple/related        | |
------------------------------
| | |multiple/alternative| | |
------------------------------
| | |纯文本正文          | | |
------------------------------
| | |超文本正文          | | |
------------------------------
| |内嵌资源                | |
------------------------------
|附件                        |
------------------------------

4.Content-Transfer-Encoding域
Content-Transfer-Encoding域定义段内文字的编码方式,不同段可以有不同的编码方式。
MIME邮件中的数据编码普遍采用base64和quoted-printable两种编码。
·base64编码的算法
编码的原则是将输入数据全部转换成由{'A'-'Z','a'-'z','0'-'9','+','/'}64个ASCII字符组成的字符序列。
编码时将需要转换的数据每次取出6bit,然后转换成十进制数字,查询64个ASCII字符组成的字典表,输出对应位置的ASCII码字符。每3个字节的数据内容会被转换成4个字典中的ASCII码字符。当转换后的数据不是4的整倍数时,用"="来填充。
·quoted-printable编码的算法
编码的原则是将输入的数据转换成可打印的ASCII码字符。
编码时根据读入内容来决定是否进行编码,如果读入的字节处于33-60,62-126范围内,属可直接打印的ASCII字符,则直接输出,否则将该字节分为两个4bit,每个用一个十六进制数来表示,然后再前面加上"=",每个需要编码的字节被转换成三个字符来表示。

转载于:http://hankundev.blog.sohu.com/104046669.html

EML文件(MIME邮件)格式分析的更多相关文章

  1. MIME邮件格式

    转自:http://kptu.iteye.com/blog/890180 排版做了调整. Q.什么是MIME?什么是MIME邮件? A. MIME, 全称为"Multipurpose Int ...

  2. after effects的xml格式工程文件aepx的格式分析(一)

    表面上看,AE的工程文件可以另存为xml格式,我们可以通过直接编辑XML来做一些事情. 很可惜,通过aepx文件修改AE工程,能做到的非常有限.理由是: 1.重要的属性都放在了标签的bdata这个属性 ...

  3. PDF格式分析

    系列文章是csdn作者'秋风之刀'写的,我只是把目录列出来而已,感谢作者辛苦付出. PDF格式分析(一)简介 PDF格式分析(二)语法之对象 PDF格式分析(三)语法之Filter PDF格式分析(四 ...

  4. 邮件MIME格式分析

    http://www.cnblogs.com/crystalray/articles/3302427.html 邮件mime格式 参考: rfc4021,Registration of Mail an ...

  5. MIME协议(一) -- RFC822邮件格式

    MIME协议(一) -- RFC822邮件格式 .   如同其他各种电子文档一样,电子邮件内容也必须遵循一定的格式要求,各种邮件处理程序才能从中分析和提取出发件人.收件人.主题和附件等信息.邮件内容的 ...

  6. HTTP POST请求报文格式分析与Java实现文件上传

    时间 2014-12-11 12:41:43  CSDN博客 原文  http://blog.csdn.net/bboyfeiyu/article/details/41863951 主题 HTTPHt ...

  7. [PHP] MIME邮件协议的multipart类型

    邮件协议中的三种情况,对应下面的三种类型 multipart/mixed可以包含附件.multipart/related可以包含内嵌资源.multipart/alternative 纯文本与超文本共存 ...

  8. SharePoint 2013中的默认爬网文件扩展名和分析文件类型

    摘要:了解默认情况下 SharePoint 2013 爬网的文件扩展名及其解析的文件类型,可以借此了解搜索可以爬的文件和支持的功能. 如果“管理文件类型”页上的列表包含文件扩展名,爬网组件将仅爬网文件 ...

  9. MIME协议(三) -- MIME邮件的组织结构

    一封MIME邮件可以由多个不同类型的MIME消息组合而成,一个MIME消息表示邮件中的一个基本MIME资源或若干基本MIME消息的组合体.每个MIME消息的数据格式与RFC822数据格式相似,也包括头 ...

随机推荐

  1. thinkphp5杂谈--项目架构和模板搭建(view视角)

    nginx网站配置 项目架构 项目文件夹 视图模板 一种出幺蛾子的访问办法 访问相关特色模块并渲染视图

  2. vue项目刷新页面,使数据不丢失(sessionStorage、localStorage、cookie)

    vue项目刷新页面时,存储在vuex中的数据会丢失,把他们存到stroage中可以保证不丢失.

  3. vue-router的hash模式和history模式,

    hash模式背后的原理是onhashchange事件,可以在window对象上监听这个事件: window.onhashchange = function(event){ console.log(ev ...

  4. linux-网络管理-6

    Hub 集线器 物理层设备 多端口中继器,不记忆MAC地址 以太网桥 OSI第二层数据链路层 扩展了网络带宽 分割了网络冲突域,使网络冲突被限制在最小的范围内 交换机作为更加智能的交换设备,能够提供更 ...

  5. consul windows下搭建

    起源 由于项目在linux部署,但是开发和测试是在windows下的,所以,暂时接触到consul,暂时也不会远程连接,只好在windows下安装consul 过程 去官网下载:https://www ...

  6. sh_07_continue

    sh_07_continue i = 0 while i < 10: # continue 某一条件满足时,不执行后续重复的代码 # i == 3 if i == 3: # 注意:在循环中,如果 ...

  7. scrapy项目1:爬取某培训机构老师信息(spider类)

    1.scrapy爬虫的流程,可简单该括为以下4步: 1).新建项目---->scrapy startproject 项目名称(例如:myspider) >>scrapy.cfg为项目 ...

  8. NABCD分析——生活日历

    N(Need)需求 本软件的主体为日历.如今人们的生活趋于现代化,大家主要通过手机来查看日期,但我们每一天都有想要做或未完成的事情,也存在对自己有特殊意义的日子.每天人们都会有或大或小的支出与收入,想 ...

  9. ppt制作的相关技巧

    一.好的ppt需要达到的目标是: 用情感打动你,用逻辑说服你 二.好主题,写在封面上 主标题带来冲击力,副标题提供描述性细节 如何打造好标题: (1)用数字给标题添彩 (2)想畅销书学标题 (3)向流 ...

  10. Java equals 和 hashCode 的这几个问题可以说明白吗?

    前言 上一篇文章 如何妙用 Spring 数据绑定? ,灵魂追问 环节留下了一个有关 equals 和 hashcode 问题 .基础面试经常会碰到与之相关的问题,这不是一个复杂的问题,但很多朋友都苦 ...