MIME 多用途互联网邮件扩展类型

2017-02-19  本文已影响0人  AugustWu

一、为什么会有 MIME?

因为 简单邮件传送协议 SMTP 有几个缺点:

  1. SMTP 不能传送可执行文件或者其他二进制对象;
  2. SMTP 只能传送7位的 ASCII 码,许多国家非英文的文字将无法传送;
  3. SMTP 服务器会拒绝超过一定长度的邮件;
  4. 某些 SMTP 的实现并没有完全按照 SMTP 的因特网标准。

正因如此,一些非英语字符消息和二进制文件,图像,声音等非文字消息都不能在电子邮件中传输。 MIME 规定了用于表示各种各样的数据类型的符号化方法。

MIME 最早应用于电子邮件系统,但后来也应用到浏览器。服务器发送的多媒体到浏览器,浏览器获取该多媒体数据的MIME类型,从而让浏览器知道接收到的信息属于哪种类型。

二、所以什么是 MIME

MIME (Multipurpose Internet Mail Extensions)多用途互联网邮件扩展类型, MIME 并没有改动或者取代 STMP ,它是继续使用原来的邮件格式的情况下,增加了邮件主体的结构,并定义了传送非 ASCII 码的编码规则。

意思就是,MIME 邮件可以在现有的电子邮件程序和协议下传送。MIME 实际在用户和 SMTP 之间的一层,将用户输入的非 ASCII 码的内容通过转换为 ASCII 码的内容,让 SMTP 协议得以接受,并利用 SMTP 协议对邮件进行传输。收件人收到后,再通过 MIME 协议对 SMTP 协议的 ASCII 码进行解码,呈现在用户眼前的是正确的信息。

三、MIME 特点

MIME 主要包括以下三部分内容:

  1. 5个新的邮件首部字段,加入到原来邮件的首部中;
  2. 定义了许多邮件内容的格式,对多媒体电子邮件的表示方法进行了标准化;
  3. 定义了传送编码,对任何格式内容进行转换。

MIME 邮件首部

MIME 邮件首部是加入要原先 SMTP 邮件的首部字段。

MIME-Version

这个头提供了所用MIME的版本号。这个值习惯上为1.0。

Content-Type

它定义了数据类型和子类型,类型与子类型用"/"分隔,以便数据能被适当的处理。有效的类型有:text,image,audio,video,applications,multipart和message。注意任何一个二进制附件都应该被叫做application/octet-stream。

Content-Transfer-Encoding

它定义了对数据所执行的编码方式,可以使用7bit,8bit,binary ,quoted-printable,base64和custom中的一种编码方式。

Content-ID

邮件的唯一标识符。

Content-Description

这是可读字符串,说明此邮件主体是否是图像、音频和视频。

MIME 段部

MIME 段首部是出现在实际的 MIME 附件部分的首部,它只作用于该段中。除了 MIME-Version 字段,可以拥有以上任何头字段。

四、内容类型

MIME 标准元先定义了7个基本内容类型和15种子类型。但是允许客户端和服务器之间定义专用的内容类型,但是为了避免名字冲突,专用类型一般以 x- 开始。

Content-Type 子类型 说明
text(文本) plain, html, xml, css 不同格式的文本
image(图像) gif, jpeg, tiff 不同格式的静止图像
audio(音频) basic, mpeg, mp4 可听见的声音
video(视频) mpeg, mp4, quicktime 不同格式的影片
model(模型) vrml 3D 模型
application(应用) octet-stream, pdf, javascript, zip 不同应用程式产生的数据
message(报文) http, rfc822 封装的报文
multipart(多部分) mixed, alternative, parallel, digest 多种类型的组合

着重理解一下 multipart

  1. mixed

允许单个报文含有多个相互独立的子报文,每个子报文拥有自己的类型和编码。在 mixed 后面用到 boundary=BOUNDARY 关键字,定义分隔各部分子报文的分隔符,在邮件用利用 --BOUNDARY 进行分隔。

From:"hello" <hello@xxx.com>
To:<world@xxx.com>
Subject:hello world
Date:Mon,9 Oct 2006 16:51:34 +0800
MIME-Version:1.0
Content-Type:multipart/mixed;boundary=lines

--lines
Hello world

-lines
Content-Type:image/gif
Content-Transfer-Encoding: base64

... images ...
--lines
  1. alternative

允许单个报文含有同一数据的多种表示。例如对于同一个文本,可以用不同的编码形式,客户端根据自己实际选择格式化的形式。

  1. parallel

允许单个报文含有可同时显示的各个子部分,例如图片和声音子部分必须一起播放。

  1. digest

允许单个报文含有一组其他报文。

五、编码

Content-Transfer-Encoding: [mechanism]

其中,mechanism的值可以指定为“7bit”,“8bit”,“binary”,“quoted-printable”,“base64”。

上一篇 下一篇

猜你喜欢

热点阅读