MIME 编码方式简介

Subject: =?gb2312?B?xOO6w6Oh?=
  这里是邮件的主题,可是因为编码了,我们看不出是什么内容,其原来的文本是:
  “你好!”我们先看看 MIME 编码的两种方法。
  对邮件进行编码最初的原因是因为 Internet 上的很多网关不能正确传输8 bit 内
  码的字符,比如汉字等。编码的原理就是把 8 bit 的内容转换成 7 bit 的形式以能正
  确传输,在接收方收到之后,再将其还原成 8 bit 的内容。
  MIME 是“多用途网际邮件扩充协议”的缩写,在 MIME 协议之前,邮件的编码曾经
  有过 UUENCODE 等编码方式 ,但是由于 MIME 协议算法简单,并且易于扩展,现在已经
  成为邮件编码方式的主流,不仅是用来传输 8 bit 的字符,也可以用来传送二进制的文
  件 ,如邮件附件中的图像、音频等信息,而且扩展了很多基于MIME 的应用。从编码方
  式来说,MIME 定义了两种编码方法Base64与QP(Quote-Printable) :
  Base 64 是一种通用的方法,其原理很简单,就是把三个Byte的数据用 4 个Byte表
  示,这样,这四个Byte 中,实际用到的都只有前面6 bit,这样就不存在只能传输 7bi
  t 的字符的问题了。Base 64的缩写一般是“B”,像这封信中的Subject 就是用的 Bas
  e64 编码。
  另一种方法是QP(Quote-Printable) 方法,通常缩写为“Q”方法,其原理是把一个
  8 bit 的字符用两个16进制数值表示,然后在前面加“=”。所以我们看到经过QP编码
  后的文件通常是这个样子:=B3=C2=BF=A1=C7=E5=A3=AC=C4=FA=BA=C3=A3=A1。
  在 PHP 里,系统有两个函数可以很方便地实现解码:base64_decode()与quoted
  _printable_decode(),前者可用于base64 编码的解码,后者是用于 QP 编码方法的
  解码。
  现在我们再来看看Subject: =?gb2312?B?xOO6w6Oh?= 这一主题的内容,这不是一段
  完整的编码,只有部分是编码了的,这个部分用 =? ?= 两个标记括起来,=? 后面说明
  的是这段文字的字符集是 GB2312 ,然后一个 ? 后面的一个 B 表示的是用的 Base64 

  MIME-Version: 1.0
  表示使用的 MIME 的版本号,一般是1.0;
  Content-Type: 定义了正文的类型,我们实际上是通过这个标识来知道正文内是什
  么类型的文件,比如:text/plain 表示的是无格式的文本正文,text/html 表示的 Ht
  ml 文档,image/gif 表示的是 gif 格式的图片等等。在本文中特别要说明一下的是邮
  件中常用到的复合类型。multipart 类型表示正文是由多个部分组成的,后面的子类型
  说明的是这些部分之间的关系,邮件中用到的三个类型有,multipart/alternative:表
  示正文由两个部分组成,可以选择其中的任意一个。主要作用是在征文同时有 text 格
  式和 html 格式时,可以在两个正文中选择一个来显示,支持 html 格式的邮件客户端
  软件一般会显示其 HTML 正文,而不支持的则会显示其 Text 正文;multipart/mixed
  :表示文档的多个部分是混合的,指正文与附件的关系。如果邮件的 MIME 类型是mult
  ipart/mixed,即表示邮件带有附件;multipart/related :表示文档的多个部分是相关
  的,一般用来描述 Html 正文与其相关的图片。
  这些复合类型又是可以嵌套使用的,比如说一个带有附件的邮件,同时有 html 与
  text 两种格式的正文,则邮件的结构是:
  Content-Type: multipart/mixed
  部分一:
  Content Type : multipart/alternative:
  Text 正文;
  Html 格式的正文 
  部分二:
  附件
  邮件结束符;
  由于复合类型由多个部分组成,因此,需要一个分隔符来分隔这多个部分,这就是
  上面的邮件源文件中的boundary="----=_NextPart_000_0007_01C03166.5B1E9510"所描
  述的,对于每一个Contect type :multipart/* 的内容,都会有这么一个说明,表示多
  个部分之间的分隔,这个分隔符是正文中不可能出现的一串古字符的组合,在文档中,
  以 "--" 加上这个boundary 来表示一个部分的开始,在文档的结束,以"--"加bounda
  ry再在最后加上 "--" 来表示文档的结束。由于复合类型是可以嵌套使用的,因此,邮
  件中可能会多个 boundary 。
  还有一个最重要的 MIME 头标签:
  Content-Transfer-Encoding: base64 它表示了这个部分文档的编码方式,也就是
  我们上面所介绍的Base64或QP(Quote-Printable)。我们只有识别了这个说明,才能用正
  确的解码方式实现对其解码。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值