MIME的编号详细介绍(由在网上材料和实践活动工作

2021-03-22 04:47 jianzhan

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。