`
sunqitang
  • 浏览: 74889 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

MIME协议分析(转)

阅读更多

第1章.     MIME概述

MIME, 全称为“Multipurpose Internet Mail Extensions”, 比较确切的中文名称为多用途互联网邮件扩展。它是当前广泛应用的一种电子邮件技术规范,基本内容定义于RFC 2045-2049(注意RFC1521RFC1522是它的过时版本)。

MIME试图在不改变SMTP协议和RFC822(邮件格式标准)的基础上,使得邮件可以传送任意二进制文件。为此,它在这些协议之上,采取了一些措施,这就是我们下面所要重点讲述的内容。

第2章.     MIME详解

2.1.  改进措施

一封邮件包括信封、邮件头和邮件体等三个部分。信封显然可以不含有二进制信息,而其它两部分则可能包含任意二进制序列,因此需要加以改进。MIME正是抓住了这两个地方来对他们加以改进。

1)        新增了一些邮件头信息,用来协商MIME的一些参数。

2)        定义了许多邮件内容的格式,对多媒体电子邮件的表示方法进行了标准化。

3)        定义了传送编码,从而可以传送任意二进制文件。

在这里,我还是要不厌其烦地强调指出,所有的改进措施都是建立在不改变原来的SMTP协议和RFC822的基础上的。事实上,我们可以把这些改进措施,看成是在用SMTP等发送邮件前所采取的预处理。

2.2.  一封简单邮件的源码

为了对MIME邮件有个直观的了解,先给出一封简单邮件的源码。源码中,行号和行号后的空格是为了分析方便而另外加的,“... ... ... ...”表示此处省略了大段编码。

   1 From: "bhw98" <bhw98@sina.com>

   2 Reply-To: bhw98@sina.com

   3 To: <bluesky7810@163.com>

   4 Subject: Re: help

   5 X-Mailer: Foxmail 4.2 [cn]

   6 Mime-Version: 1.0

   7 Content-Type: multipart/alternative;

   8  boundary="=====002_Dragon307572345230_====="

   9

  10

  11 This is a multi-part message in MIME format.

  12

  13 --=====002_Dragon307572345230_=====

  14 Content-Type: text/plain; charset="GB2312"

  15 Content-Transfer-Encoding: quoted-printable

  16

  17 bluesky7810=A3=AC=C4=FA=BA=C3=A3=A1

  18

  19 =A1=A1=A1=A1=D4=DA=CF=C2=C6=AA=D7=EE=BA=F3=BF=C9=D2=D4=CF=C2=D4=D8=B0=A1=A3=AC=C4=E3

     ... ...  ... ...

  30 =A1=A1=A1=A1=A1=A1=A1=A1=A1=A1=A1=A1=A1=A1=A1=A1=A1=A1=A1=A1=A1=A1=A1=A1=A12003-04-07

  31

  32 --=====002_Dragon307572345230_=====

  33 Content-Type: text/html; charset="GB2312"

  34 Content-Transfer-Encoding: quoted-printable

  35

  36 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">

  37 <HTML><HEAD>

  38 <META content=3D"text/html; charset=3Dgb2312"=

  39  http-equiv=3DContent-Type>

  40 <META content=3D"MSHTML 5.00.2920.0" name=3DGENERATOR>

     ... ...  ... ...

  79 </HTML>

  80

  81 --=====002_Dragon307572345230_=====--

  82

我们可以在用户代理中查看到这样的源码。例如可以利用用户代理来查看一封邮件的原始编码。例如在Foxmail中,选定邮件后,单击右键,选择“原始信息”项即可。至于源码的具体意思则正是后续内容所要讲的。

2.3.  邮件头

2.3.1.  邮件头的域

邮件头包含了发件人、收件人、主题、时间、MIME版本、邮件内容的类型等重要信息。每条信息称为一个域,由域名后加“”和信息内容构成,可以是一行,较长的也可以占用多行。域的首行必须“顶头”写,即左边不能有空白字符(空格和制表符);续行则必须以空白字符打头,且第一个空白字符不是信息本身固有的,解码时要过滤掉。如例27-8行分别属于一个域。

 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

内容的传输编码方式

邮件的创建者

 1 邮件头中常见的域

非标准的、自定义域名都以X-开头,例如X-Mailer, X-MSMail-Priority等,通常在接收和发送邮件的是同一程序时才能理解它们的意义。除了后面两个域外,其他的域的意思很明了,所以下面只对后两个域做解释。

2.3.2.  Content-Type

Content-Type域,即内容类型域,它用来说明传输的内容的类型。Cotent-Type域又由“主类型/子类型”构成,主类型有text, image, audio, video, application, multipart, message等,分别表示文本、图片、音频、视频、应用、分段、消息等。每个主类型都可能有多个子类型,如text类型就包含plain, html, xml, css等子类型。以X-开头的主类型和子类型,同样表示自定义的类型,未向IANA正式注册,但大多已经约定成俗了。如application/x-zip-compressedZIP文件类型。在Windows中,注册表的“HKEY_CLASSES_ROOT\MIME\Database\Content Type”内列举了除multipart之外大部分已知的Content-Type

各种各种类型一般都可以带参数。至于参数的形式,RFC里有很多补充规定,有的允许带几个参数,较为常见的如 2所示

主类型

参数名

含义

text

charset

字符集

image

name

名称

application

name

名称

multipart

boundary

边界

 2 常见类型的参数

 

2.3.3.  Content-Transfer-Encoding

Content-Transfer-Encoding域即传送编码域,它用来说明后面传输的内容的编码方式。

Content-Transfer-Encoding共有Base64, Quoted-printable, 7bit, 8bit, Binary等几种。其中7bit是缺省的编码方式。电子邮件源码最初设计为全部是可打印的ASCII码的形式。非ASCII码的文本或数据要编码成要求的格式,如上面的三个例子。Base64, Quoted-Printable是在非英语国家使用最广使的编码方式。Binary方式只具有象征意义,而没有任何实用价值。关于Base64编码和Quoted-Printable编码请参考RFC文档或另外一篇文章《SMTP协议分析》。

近年来,国内多数邮件服务器已经支持8bit方式,因此只在国内传输的邮件,特别是在邮件头中,可直接使用8bit编码,对汉字不做处理。如果邮件要出国,还是老老实实地按Base64Quoted-printable编码才行

2.4.  邮件体

邮件体的类型由邮件头的“Content-Type”域指出。常见的简单类型有text/plain(纯文本)text/html(超文本)

源码中出现的multipart类型,是MIME邮件的精髓。邮件体被分为多个段,每个段又包含段头和段体两部分,这两部分之间也以空行分隔。常见的multipart类型有三种:multipart/mixed, multipart/relatedmultipart/alternative。从它们的名称,不难推知这些类型各自的含义和用处。它们之间的层次关系可归纳为 1所示

+------------------------- multipart/mixed ----------------------+                                                                      |  +----------------- multipart/related -------------+            |                                                    |  |                                                 |            |                                                                 |  |                                                 |            |
|  |  +----multipart/alternative ---+  +----------+  |  +------+  |  |  |  |                             |  | 内嵌资源 |  |  | 附件 |  |  |  |  |  +-----------+ +----------+ |  +----------+  |  +------+  |
|  |  |  | 纯文本正文| |超文本正文| |                |            |
|  |  |  +-----------+ +----------+ |  +----------+  |  +------+  |
|  |  |                             |  | 内嵌资源 |  |  | 附件 |  |  |  |  +-----------------------------+  +----------+  |  +------+  |
|  |                                                 |            |            |  +-------------------------------------------------+            |                                                                  +-----------------------------------------------------------------+

 1 邮件体的层次关系图

可以看出,如果在邮件中要添加附件,必须定义multipart/mixed段;如果存在内嵌资源,至少要定义multipart/related段;如果纯文本与超文本共存,至少要定义multipart/alternative段。什么是“至少”?举个例子说,如果只有纯文本与超文本正文,那么在邮件头中将类型扩大化,定义为multipart/related,甚至multipart/mixed,都是允许的。

multipart诸类型的共同特征是,在段头指定“boundary”参数字符串,段体内的每个子段以此串定界。所有的子段都以“--+boundary行开始,父段则以“--+boundary+--”行结束。段与段之间也以空行分隔。在邮件体是multipart类型的情况下,邮件体的开始部分(第一个“--+boundary行之前)可以有一些附加的文本行,相当于注释,解码时应忽略。段间也可以有一些附加的文本行,不会显示出来,如果有兴趣,不妨验证一下。

结合boundary定界和multipart层次关系图,我们分析一下源码中的邮件体层次与段嵌套关系。 在源码中,10-12行是附加文本行,13-82行是multipart/alternative型的段,包含两个子段:13-30行是纯文本正文,32-79行是超文本正文。

需要补充说明地是,构成邮件体的各段有自己的属性,这些属性由段头的域来说明。 3给出了段头中常见的域。

域名

含义

Content-Type

段体的类型

Content-Transfer-Encoding

margin-top: 0cm; margin-right: 0cm; margin-bottom: 0pt; margin-left: 0cm; line-height: 21px; pad

分享到:
评论
1 楼 DepthJava 2010-05-13  
一直没找到,能完全解析EMial的方法。包括MIME解析

乱码,邮件格式不规则....一直遗留着

相关推荐

    MIME协议分析 MIME

    MIME协议分析 第1 章. MIME概述 MIME,全称为“Multipurpose Internet Mail Extensions”,比较确切的中文 名称为“多用途互 联网邮件扩展”。 它是当前广泛应用的一种电子邮件技术规范,基本内容定义于RFC 2045-2049...

    MIME协议的简单介绍和分析.pdf

    MIME协议的简单介绍和分析.pdf 学习资料 复习资料 教学资源

    邮件协议(SMTP&POP3&MIME)详解

    该压缩包包含三个文档,分别是SMTP协议详解,POP3协议详解,MIME协议详解,文档中详细介绍了一个邮件发送和接收的过程分析,协议本身的包含的命令和工作过程,为开发邮件代理的客户端提供技术基础。

    SMTP&POP3协议详细&MIME规范

    该压缩包包含三个文档,分别是SMTP协议详解,POP3协议详解,MIME规范详解,文档中详细介绍了一个邮件发送和接收的过程分析,协议本身的包含的命令和工作过程,为开发邮件代理的客户端提供技术基础。如下是部分SMTP...

    Delphi网络通信协议分析与应用实现pdf清晰

    6.4.5 MIME信件的语法分析 6.5 E-mail乱码 6.5.1 乱码的常见形式及形成原因 6.5.2 避免乱码的方法 6.6 E-mail程序开发 6.6.1 建立工程项目 6.6.2 关键代码分析 第7章 网络监控、流量统计与资源搜索 7.1 网络...

    电子邮件协议浅析

    电子邮件协议浅析,讲述了smtp,pop3,MIME的概念,实现和BS,CS模式。

    TCPIP协议详解(4-1)

    (ICANN) 18 2.6.7 Internet网络信息中心和其他注 册组织 18 2.6.8 RFC编辑 18 2.6.9 Internet服务提供商 18 2.7 小结 19 第3章 TCP/IP概述 20 3.1 TCP/IP的优点 20 3.2 TCP/IP的层和协议 ...

    rfc中文文档目录,包含部分翻译

    RFC1387_RIP(版本2)协议分析 RFC1388_RIP协议版本2 RFC1393 Traceroute使用IP选项 RFC1397_在边界网关协议(Border Gateway Protocol)版本2 RFC1408_Telnet环境选项 RFC1413_鉴定协议 RFC1414_身份识别管理系统...

    中文版RFC,共456

    RFC1387 RIP(版本2)协议分析 RFC1388 RIP协议版本2 RFC1393 Traceroute使用IP选项 RFC1397 在边界网关协议(Border Gateway Protocol)版本2 RFC1408 Telnet环境选项 RFC1413 鉴定协议 RFC1418 SNMP优于OSI RFC...

    RFC中文文档-txt

    RFC1387 RIP(版本2)协议分析 RFC1388 RIP协议版本2 RFC1393 Traceroute使用IP选项 RFC1397 在边界网关协议(Border Gateway Protocol)版本2 RFC1408 Telnet环境选项 RFC1413 鉴定协议 RFC1418 SNMP优于OSI RFC...

    中文RFC文档.zip

    RFC1387 RIP(版本2)协议分析 RFC1388 RIP协议版本2 RFC1393 Traceroute使用IP选项 RFC1397 在边界网关协议(Border Gateway Protocol)版本2 RFC1408 Telnet环境选项 RFC1413 鉴定协议 RFC1414 身份识别管理系统...

    基于SMTP邮件截获与还原技术研究.pdf

    1.3 三个重要的电子邮件传输协议 3 1.3.1 SMTP协议 3 1.3.2 POP3协议 5 1.3.3 IMAP协议 7 1.4多用途Internet邮件扩展(Multipurpose Internet Mail Extensions) 9 1.4.1 Base64编码 9 1.4.2 Base64编码/解码的算法...

    EldoS最新软件包可隐藏安全协议细节

    EldoS公司的SecureBlackbox 4.0是一个含有6个组件的软件包,可用于网络安全中隐藏低级别安全协议和算法的细节。 该软件可保证标准互联网协议(如FTP、HTTP、SMTP、POP3...该软件还能建立和分析具有安全扩展(S/MIME和P

    计算机网络&计算机网络

    16.3.2 MIME:多用途Internet邮件扩展 16.3.3 SMTP:简单邮件传输协议 16.4 邮箱访问 16.5 小结 习题 第17章 万维网 17.1 Web页面浏览 17.1.1 浏览器和服务器 17.1.2 HTTP 17.1.3 HTML语言 17.2 交互式...

    计算机网络(汲及内容全面)

    16.3.2 MIME:多用途Internet邮件扩展 16.3.3 SMTP:简单邮件传输协议 16.4 邮箱访问 16.5 小结 习题 第17章 万维网 17.1 Web页面浏览 17.1.1 浏览器和服务器 17.1.2 HTTP 17.1.3 HTML语言 17.2 交互式...

    计算机网络基础知识

    16.3.2 MIME:多用途Internet邮件扩展 16.3.3 SMTP:简单邮件传输协议 16.4 邮箱访问 16.5 小结 习题 第17章 万维网 17.1 Web页面浏览 17.1.1 浏览器和服务器 17.1.2 HTTP 17.1.3 HTML语言 17.2 交互式...

    经典全面系统的网络工程师资料

    16.3.2 MIME:多用途Internet邮件扩展 16.3.3 SMTP:简单邮件传输协议 16.4 邮箱访问 16.5 小结 习题 第17章 万维网 17.1 Web页面浏览 17.1.1 浏览器和服务器 17.1.2 HTTP 17.1.3 HTML语言 17.2 交互式...

    电话语音邮件网关的设计与实现 (2005年)

    软件系统采用了Microsoft的Visual C++6.0开发平台,通过对MIME邮件协议的分析,实现对语音邮件的解析与合成,设计完全符合MIME规范,并具有良好的可扩展性.本系统成功地将计算机和电话机的优势有机地结合起来,实现...

    网络编程实用教程(第三版).zip

    1.1.3 网络协议的特征 7 1.2 三类网络编程 10 1.2.1 基于TCP/IP协议栈的网络编程 10 1.2.2 基于WWW应用的网络编程 10 1.2.3 基于.NET框架的Web Services网络编程 10 1.3 客户机/服务器交互模式 13 1.3.1...

Global site tag (gtag.js) - Google Analytics