MIME邮件格式的浅析

在RFC 2822文档中定义了简单的 ASCII编码的Email的邮件格式,然而随着Internet的发展,Email邮件仅仅传输简单的文本已经满足不了用户的需求,为了在Email 中传输大量HTML、图像、声音以及各种附件格式,一种新的扩展的邮件格式应运而生——MIME。由于在MIME邮件格式非常复杂,大量的RFC文档中对MIME邮件格式进行了定义与说明,比如RFC2045, RFC2046, RFC2047, RFC2049, RFC2231, RFC2387, RFC4288, RFC4289等。因此,MIME邮件格式为我们提供了极大的灵活性的同时也给我们解读MIME格式的Email邮件带来了极大的困难。以下就一封具体的邮件原始信息对MIME邮件格式作出一个概要的介绍。

解释几个常用且不易理解的Content-Type开头的MIME首部:

Received: from JSJ104 (unknown [202.204.96.147])
    by smtp14 (Coremail) with SMTP id wKjRDyJAHALkc2lFEtAjAg==.38990S2;
    Sun, 26 Nov 2006 19:00:55 +0800 (CST)
Message-ID: 
< 000601c7114a $2fd50450$9360ccca@JSJ104 >
From: 
< ctp_41023 @163.com >
To: 
< ctp_41023 @163.com >
Subject: =?gb2312?B?MTIzMTIzxOO6wzEyMzEyMw==?=
Date: Sun, 26 Nov 2006 19:01:04 +0800
MIME-Version: 1.0
Content-Type: multipart/alternative;
    boundary="----=_NextPart_000_0003_01C7118D.38E01920"
X-Priority: 3
X-MSMail-Priority: Normal
X-Mailer: Microsoft Outlook Express 6.00.2900.2869
X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2900.2962

This is a multi-part message in MIME format.

------=_NextPart_000_0003_01C7118D.38E01920
Content-Type: text/plain;
    charset="gb2312"
Content-Transfer-Encoding: base64

MTIzMTIzMTIz

------=_NextPart_000_0003_01C7118D.38E01920
Content-Type: text/html;
    charset="gb2312"
Content-Transfer-Encoding: base64

PCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMCBUcmFuc2l0aW9uYWwv
L0VOIj4NCjxIVE1MPjxIRUFEPg0KPE1FVEEgaHR0cC1lcXVpdj1Db250ZW50LVR5cGUgY29udGVu
dD0idGV4dC9odG1sOyBjaGFyc2V0PWdiMjMxMiI+DQo8TUVUQSBjb250ZW50PSJNU0hUTUwgNi4w
MC4yOTAwLjI5OTUiIG5hbWU9R0VORVJBVE9SPg0KPFNUWUxFPjwvU1RZTEU+DQo8L0hFQUQ+DQo8
Qk9EWSBiZ0NvbG9yPSNmZmZmZmY+DQo8RElWPjxGT05UIHNpemU9Mj4xMjMxMjMxMjM8L0ZPTlQ+
PC9ESVY+PC9CT0RZPjwvSFRNTD4NCg==

------=_NextPart_000_0003_01C7118D.38E01920--

这封Email具有一个邮件首部,然后是邮件的主体部分,它包括一个文本和一个HTML类型。可以注意到这样一行编码“boundary="----=_NextPart_000_0003_01C7118D.38E01920" ”,它是用来隔离MIME邮件的各个实体部分。

在RFC2822中定义了MIME邮件首部的格式: 

field-name ":" [ field-body ] CRLF

例如:
MIME-Version: 1.0
Content-Type: multipart/alternative;
Content-Type: text/plain;
Content-Transfer-Encoding: base64

最常见也用途最都的MIME首部是以Content-Type开头的,在RFC2046给出了它的定义,大致与如下内容相似:

 

Content - Type: text / plain;
Content
- Type: text / plain; charset = ISO - 8859 - 1
Content
- Type: text / plain; charset = us - ascii
Content
- Type: text / plain; charset = utf - 8
Content
- Type: text / html;
Content
- Type: text / html; charset = ISO - 8859 - 1
Content
- Type: text / css
Content
- Type: image / gif; name = image004.gif
Content
- Type: image / jpeg; name = " image005.jpg "
Content
- Type: message / delivery - status
Content
- Type: message / rfc822
Content
- Type: audio / x - mpeg
Content
- Type: video / mpeg - 2
Content
- Type: application / msword
Content
- Type: application / mspowerpoint 
Content
- Type: application / zip

Content
- Type: multipart / mixed;     boundary = " ----=_Part_3431_12384933.1139387792352 "
Content
- Type: multipart / alternative; boundary = " ----=_Part_4088_29304219.1115463798628 "
Content
- Type: multipart / related;     boundary = " ----=_Part_2067_9241611.1139322711488 "
Content
- Type: multipart / digest;     boundary = " ----=Next message 15543233913938263541 "
Content
- Type: multipart / report; report - type = delivery - status; 
              boundary
= " k04G6HJ9025016.1136391237/carbon.singnet.com.sg "
Content
- Type: multipart / parallel

 

 

 1)  Content-Type: multipart/mixed
它表明这封Email邮件中包含各种格式的MIME实体但没有具体给出每个实体的类型。

 2) Content-Type: multipart/alternative
如果同一封Email邮件既以文本格式又以HTML格式发送,那么要使用Content-Type: multipart/alternative。这两种邮件格式实际上是显示同样的内容但是具有不同的编码。

 3) Content-Type: multipart/related
用于在同一封邮件中发送HTML文本和图像或者是其他类似类型。

邮件主体的编码:

主要是包括quoted-printable与base64两种类型的编码。

(待续)


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值