邮件标准协议:MIME(Multipurpose Internet Mail Extensions)

时间:2021-01-01 05:46:17

MIME(多用途互联网邮件扩展)指的是一系列电子邮件技术规范 ,主要包括 RFC 2045~2049

 

传统的电子邮件只能使用 ASCII 字符,导致非英文字符都不能在电子邮件中使用

而且电子邮件中不能插入二进制文件(图片/视频),也没有附件

 

MIME 是对传统电子邮件的一个扩展,现在已经成为电子邮件实际上的标准


MIME 标准浅析

下面是一封普通的电子邮件 Test Mail 的信件头:

邮件标准协议:MIME(Multipurpose Internet Mail Extensions)

从上面可以看出,这封信的发信人地址是 chen892704@163.com,收信人地址是 sqchen@coremail.cn ,邮件主题是 Test ,发送时间是 2018 年 7 月 19 日

从结构上,这封信分为三个部分:信件头 + 空行 + 信件体

 

MIME 对传统电子邮件的扩展表现在,它在信件头部分添加了几条语句,主要有:

邮件标准协议:MIME(Multipurpose Internet Mail Extensions)

这条语句标识了这封信使用了 MIME 规范,其中 1.0 的版本号是不变的,即使 MIME 本身已经升级好几次

 

邮件标准协议:MIME(Multipurpose Internet Mail Extensions)

这条语句表明了传递的信息类型,包含主要类型(primary type)和次要类型(subtype)两部分,两者之间用 “/” 分割

常见的简单类型有:

邮件标准协议:MIME(Multipurpose Internet Mail Extensions)

 

上例中出现的 multipart 类型是 MIME 邮件的重要内容,邮件体被分为多个段,每个段又包含段头和段体两部分,这两部分之间也以空行分隔

常见的 multipart 类型有三种:multipart/mixed、multipart/related 和 multipart/alternative,它们的层次关系可归纳为下图:

邮件标准协议:MIME(Multipurpose Internet Mail Extensions)

(详细内容参考 Multi-Part MIME Messages

其中 boundary 表示不同信件内容的分割线,它通常是一个很长的随机字符串

 


下面观察一下 Test Mail 的邮件体:

邮件标准协议:MIME(Multipurpose Internet Mail Extensions)

从邮件体可以看出,这封邮件的内容包括四部分:

  • 纯文本:Hello world
  • 超文本:字体、字号等信息
  • 图片:cm.jpg
  • 附件:rfc2045.txt.pdf

 

由于电子邮件的传统格式不支持非 ASCII 编码和二进制数据,因此 MIME 规定了第三条语句:

邮件标准协议:MIME(Multipurpose Internet Mail Extensions)

这条语句指明了该块内容的编码转换方式,Content-Transfer-Encoding 的值有五种:7bit、8bit、binary、quote-printable 和 base64

其中 7bit 是缺省值,即不用转化的 ASCII 字符

 

可以注意到在图片和附件块有一行特殊的语句:

邮件标准协议:MIME(Multipurpose Internet Mail Extensions)

邮件标准协议:MIME(Multipurpose Internet Mail Extensions)

Content-Disposition 是 MIME 协议的扩展,MIME 协议指示 MIME 用户代理如何显示附加的文件

Content-Disposition 可以控制用户请求所得的内容为一个文件的时候提供默认的文件名,文件直接在浏览器上显示或者在访问文件时弹出文件下载框

content-disposition = "Content-Disposition" ":" disposition-type *( ";" disposition-parm )

本例中,cm.jpg 会直接在浏览器中显示(inline),而 rfc2045.txt.pdf 则会以附件形式下载(attachment)