1、MIME: Multipurpose Internet Mail Extensions
英国帝国大学测算机线上字典FOLDOC对MIME的解释为:“多一部分(multi-part)、多新闻媒体电子器件电子邮件和WWW超文字的1种编号规范,用于传输诸如图型、响声和传真等非文字数据信息。MIME界定于RFC1341,用MIMENCODE的方式将2进制数据信息变换变成1种被称为BASE64的ASCII非空子集的标识符的组成。”
Internet上有专业探讨MIME的新闻组: comp.mail.mime。该新闻组的FAQ能够从下面的网点得到:
http://www.cis.ohio-state.edu/hypertext/faq/usenet/mail/mime-faq/mime0/faq.html
MIMENCODE最开始称为MMENCODE,提出用MIMENCODE替代UUENCODE,是由于UUENCODE应用了1些标识符在1些电子邮件网关(非常是那些变换ASCII和EBCDIC码的网关)中导致传送阻碍,(也有1些手机软件不可以对全部 UUENCODE 的优化算法开展正确解码而致使电子邮件的阅读文章艰难),因而 MIME 被设计方案用于取代UUENCODE,可是結果是这些协议书共存。
在MIME出台以前,应用RFC 822只能推送基础的ASCII码文字信息内容,电子邮件內容假如要包含2进制文档、响声和动漫等,完成起来十分艰难。
MIME出示了1种能够在电子邮件中额外多种多样不一样编号文档的方式,填补了原先的信息内容文件格式的不够。具体上不仅是电子邮件编号,如今MIME经变成HTTP协议书规范的1个一部分。
2、MIME编号方法简介
对电子邮件开展编号最开始的缘故是由于 Internet 上的许多网关不可以正确传送8bit内码的标识符,例如中国汉字等。编号的基本原理便是把8bit的內容变换成7bit的方式以能正确传送,在接受方收到以后,再将其复原成8bit的內容。
在MIME协议书以前,电子邮件的编号以前有过UUENCODE等编号方法 ,可是因为MIME协议书优化算法简易,而且易于拓展,如今早已变成电子邮件编号方法的流行,不但是用来传送8bit的标识符,还可以用来传输2进制的文档,如电子邮件附件中的图象、声频等信息内容,并且拓展了许多根据MIME 的运用。从编号方法来讲,MIME界定了两种编号方式Base64与QP(Quote-Printable)。
1.Base64编号
Base64是1种通用性的方式,其基本原理很简易,便是把3个Byte的数据信息用4个Byte表明。在这4个Byte中,具体用到的都仅有前面6bit,这样就不存在只能传送7bit的标识符的难题了。Base64的缩写1般是“B”。
Base64将键入的标识符串或1段数据信息编号成只含有{'A'-'Z', 'a'-'z', '0'-'9', '+', '/'}这64个标识符的串,'='用于填充。
其编号的方式是,将键入数据信息流每次取6bit,用此6bit的值(0⑹3)做为数据库索引去查表,輸出相应标识符。
这样,每3个字节将编号为4个标识符(3×8 → 4×6);不满4个标识符的以'='填充。
有的场所,以“=?charset?B?xxxxxxxx?=”表明xxxxxxxx是Base64编号,且原文的标识符集是charset。在段身体则立即编号,适度机会换行,MIME提议每行数最多76个标识符。
Base64的优化算法很简易,它将标识符流次序放入1个24位的缓存区,缺标识符的地区补零。
随后将缓存区断开变成4个一部分,高位在先,每一个一部分6位,用64个标识符再次表明。假如键入仅有1个或两个字节,那末輸出将用等号“=”补足。这能够装修隔断额外的信息内容导致编号的错乱。
怎样开展base64编号
Base64 应用US-ASCII非空子集的65个标识符, 每一个标识符用6位表明
针对文字串,编号全过程以下。比如"men":
先转成US-ASCII值.
"m"10进制 109
"e"10进制 101
"n"10进制 110
2进制 :
m 01101101
e 01100101
n 01101110
3个8位连起来是24位
00
随后分为4个6位
011011 010110 010101 101110
如今获得4个值,10进制为
27 22 21 46
对应的 Base64 标识符是 : b W V u
编号一直根据3个标识符,从而造成4个Base64标识符。
假如只是2个标识符的数据信息,应用独特标识符"="补齐Base64的4字。
如,编号"me"
01101101 01100101
00101
011011 010110 0101
111111 (与,补足6位)
011011 010110 010100
b W U
b W U = ("=" 补足4标识符)
因而 "bWU=" 便是"me"的Base64值.
假如只是2个标识符的数据信息,如编号 "m"
01101101
011011 01
111111
011011 010000
b Q = =
因而 "bQ==" 便是"m"的Base64值.
2.QP编号
另外一种方式是QP(Quote-Printable) 方式,一般缩写为“Q”方式,其基本原理是把1个8bit的标识符用两个16进制标值表明,随后在前面加“=”。因此大家看到历经QP编号后的文档一般是这个模样:=B3=C2=BF=A1=C7=E5=A3= AC=C4=FA=BA=C3=A3=A1。
Quoted -printable依据键入的标识符串或字节范畴开展编号,若是不需编号的标识符,立即輸出。若必须编号,则先輸出'=',后边跟随以2个标识符表明的106进制字节值。有的场所,以“=?charset?Q?xxxxxxxx?=”表明xxxxxxxx是Quoted-printable编号,且原文的标识符集是charset。在段身体则立即编号,适度机会换行,换行前附加輸出1个'='。
3、MIME的头信息内容
电子邮件头
在电子邮件头中,有许多从RFC 822延用的网站域名,MIME也提升了1些。普遍的规范网站域名和含意以下:
网站域名 含意 加上者
Received 传送相对路径 各级电子邮件服务器
Return-Path 回应详细地址 总体目标电子邮件服务器
Delivered-To 推送详细地址 总体目标电子邮件服务器
Reply-To 回应详细地址 电子邮件的建立者
From 发件人详细地址 电子邮件的建立者
To 收件人详细地址 电子邮件的建立者
Cc 抄送详细地址 电子邮件的建立者
Bcc 暗送详细地址 电子邮件的建立者
Date 时间和時间 电子邮件的建立者
Subject 主题 电子邮件的建立者
Message-ID 信息ID 电子邮件的建立者
MIME-Version MIME版本号 电子邮件的建立者
Content-Type 內容的种类 电子邮件的建立者
Content-Transfer-Encoding 內容的传送编号方法 电子邮件的建立者
非规范的、自定网站域名都以X-开始,比如X-Mailer, X-MSMail-Priority等,一般在接受和推送电子邮件的是同1程序流程时才可以了解它们的实际意义。
段头
在段头中,大概有以下1些域:
网站域名 含意
Content-Type 段体的种类
Content-Transfer-Encoding 段体的传送编号方法
Content-Disposition 段体的分配方法
Content-ID 段体的ID
Content-Location 段体的部位(相对路径)
Content-Base 段体的基部位
有的域除值以外,还带有主要参数。值与主要参数、主要参数与主要参数之间以“;”隔开。主要参数名与主要参数值之间以“=”隔开。
1.MIME-Version
表明应用的MIME的版本号号,1般是1.0;
如:
MIME-Version: 1.0
2.Content-Type
Content-Type界定了文章正文的种类,大家具体上是根据这个标志来了解文章正文内是甚么种类的文档。例如:text/plain 表明的是无文件格式的文字文章正文,text/html 表明的 Html 文本文档,image/gif 表明的是 gif 文件格式的照片这些。Content-Type全是“主种类/子种类”的方式。主种类有text, image, audio, video, application, multipart, message等,各自表明文字、照片、声频、视頻、运用、分段、信息等。每一个主种类都可以能有好几个子种类,如text种类就包括plain, html, xml, css等子种类。以X-开始的主种类和子种类,一样表明自定的种类,未向IANA宣布申请注册,但大多数早已承诺成俗了。如application/x-zip-compressed是ZIP文档种类。在Windows中,申请注册表的“HKEY_CLASSES_ROOT\MIME\Database\Content Type”内例举了除multipart以外绝大多数已知的Content-Type。
有关主要参数的方式,RFC里有许多填补要求,有的容许带几个主要参数,较为普遍的有:
主种类 主要参数名 含意
text charset 标识符集
image name 名字
application name 名字
multipart boundary 界限
multipart种类
电子邮件中常见到的复合型种类:multipart。
multipart种类表明文章正文是由好几个一部分构成的,后边的子种类表明的是这些一部分之间的关联。
电子邮件选用到的3个种类有:
(1).multipart/alternative:表明文章正文由两个一部分构成,能够挑选在其中的随意1个。关键功效是在征文另外有text文件格式和html文件格式时,能够在两个文章正文选中择1个来显示信息,适用 html 文件格式的电子邮件顾客端手机软件1般会显示信息其 HTML 文章正文,而不适用的则会显示信息其Text文章正文;
(2).multipart/mixed:表明文本文档的好几个一部分是混和的,纠正文与附件的关联。假如电子邮件的MIME种类是multipart/mixed,即表明电子邮件带有附件。
(3).multipart/related:表明文本文档的好几个一部分是有关的,1般用来叙述 Html 文章正文与其有关的照片。
multipart种类,是MIME电子邮件的精粹。电子邮件体被分成好几个段,每一个段又包括段头和段体两一部分,这两一部分之间也以空行隔开。它们之间的层级关联可梳理为下图所示:
+------------------------- multipart/mixed ----------------------------+
| |
| +----------------- multipart/related ------------------+ |
| | | |
| | +----- multipart/alternative ------+ +----------+ | +------+ |
| | | | | 嵌入資源 | | | 附件 | |
| | | +------------+ +------------+ | +----------+ | +------+ |
| | | | 纯文字文章正文 | | 超文字文章正文 | | | |
| | | +------------+ +------------+ | +----------+ | +------+ |
| | | | | 嵌入資源 | | | 附件 | |
| | +----------------------------------+ +----------+ | +------+ |
| | | |
| +------------------------------------------------------+ |
| |
+----------------------------------------------------------------------+
能够看出,假如在电子邮件中要加上附件,务必界定multipart/mixed段;假如存在嵌入資源,最少要界定multipart/related段;假如纯文字与超文字共存,最少要界定multipart/alternative段。甚么是“最少”?举个事例说,假如仅有纯文字与超文字文章正文,那末在电子邮件头中将种类扩张化,界定为multipart/related,乃至multipart/mixed,全是容许的。
multipart诸种类的相互特点是,在段头特定“boundary”主要参数标识符串,段身体的每一个子段以此串定界。全部的子段都以“--”+boundary行刚开始,父段则以“--”+boundary+“--”行完毕。段与段之间也以空行隔开。在电子邮件体是multipart种类的状况下,电子邮件体的刚开始一部分(第1个“--” +boundary行以前)能够有1些额外的文字行,非常于注解,解码时应忽视。段间还可以有1些额外的文字行,不容易显示信息出来。
这些复合型种类又是能够嵌套循环应用的,例如说1个带有附件的电子邮件,另外有html与text两种文件格式的文章正文,则电子邮件的构造是:
Content-Type: multipart/mixed
一部分1:
Content Type : multipart/alternative:
Text 文章正文;
Html 文件格式的文章正文
一部分2:
附件
电子邮件完毕符;
因为复合型种类由好几个一部分构成,因而,必须1个隔开符来隔开这好几个一部分,这便是上面的电子邮件源文档中的boundary所叙述的,针对每个Contect type :multipart/* 的內容,都会有这么1个表明,表明好几个一部分之间的隔开。
含有 MIME/BASE64编号的电子邮件,你查询它的源代码时1般都含有:“This is a multi-part message in MIME format.”这样的语句。还可以被绝大部分的email程序流程开展解码,包含Netscape、MS Mail、Eudora等。这些程序流程能够正确鉴别电子邮件的文章正文,恢 MIME/BASE64 编号的一部分为正确的文本或夹带的2进制文档。
3.Content-Transfer-Encoding
它表明了这个一部分文本文档的编号方法。仅有鉴别了这个表明,才可以用正确的解码方法完成对其解码。
Content-Transfer-Encoding共有Base64, Quoted-printable, 7bit, 8bit, Binary等几种。
在其中7bit是缺省的编号方法。电子器件电子邮件源代码最开始设计方案为所有是可复印的ASCII码的方式。
非ASCII码的文字或数据信息要编号成规定的文件格式。
Base64, Quoted-Printable是在非英语我国应用最广使的编号方法。
Binary方法只具备代表实际意义,而沒有任何好用使用价值。
4.boundary
这个隔开符是文章正文中不能能出現的1串古标识符的组成,在文本文档中,以"--"再加这个boundary 来表明1个一部分的刚开始,在文本文档的完毕,以"--"加boundary再在最终再加"--"来表明文本文档的完毕。因为复合型种类是能够嵌套循环应用的,因而,电子邮件中将会会好几个boundary。