MIME关于附件的传输.docx
- 文档编号:9948669
- 上传时间:2023-02-07
- 格式:DOCX
- 页数:18
- 大小:25.38KB
MIME关于附件的传输.docx
《MIME关于附件的传输.docx》由会员分享,可在线阅读,更多相关《MIME关于附件的传输.docx(18页珍藏版)》请在冰豆网上搜索。
MIME关于附件的传输
Q什么是MIME?
什么是MIME邮件?
AMIME,全称为“MultipurposeInternetMailExtensions”,比较确切的中文名称为“多用途互联网邮件扩展”。
它是当前广泛应用的一种电子邮件技术规范,基本内容定义于RFC2045-2049。
自然,MIME邮件就是符合MIME规范的电子邮件,或者说根据MIME规范编码而成的电子邮件。
在MIME出台之前,使用RFC822只能发送基本的ASCII码文本信息,邮件内容如果要包括二进制文件、声音和动画等,实现起来非常困难。
MIME提供了一种可以在邮件中附加多种不同编码文件的方法,弥补了原来的信息格式的不足。
实际上不仅仅是邮件编码,现在MIME经成为HTTP协议标准的一个部分。
下面举几个MIME邮件的例子,让我们先对MIME编码的格式有个直观的印象。
例1是最简单的,只带纯文本正文,基本上就是RFC822格式;例2复杂一些,包含纯文本和超文本正文;例3是最复杂的,包含纯文本正文、超文本正文、内嵌资源和文件附件。
其中,行号和行号后的空格是为了分析方便而另外加的,“............”表示此处省略了大段编码。
例1
1Date:
Thu,18Apr200209:
32:
45+0800
2From:
3To:
4Subject:
Test
5Mime-Version:
1.0
6Content-Type:
text/plain;charset="iso-8859-1"
7
8Thisisasimplemail.
9
例2
1From:
"bhw98"
2Reply-To:
bhw98@
3To:
4Subject:
Re:
help
5X-Mailer:
Foxmail4.2[cn]
6Mime-Version:
1.0
7Content-Type:
multipart/alternative;
8boundary="=====002_Dragon307572345230_====="
9
10
11Thisisamulti-partmessageinMIMEformat.
12
13--=====002_Dragon307572345230_=====
14Content-Type:
text/plain;charset="GB2312"
15Content-Transfer-Encoding:
quoted-printable
16
17bluesky7810=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_=====
33Content-Type:
text/html;charset="GB2312"
34Content-Transfer-Encoding:
quoted-printable
35
36
DOCTYPEHTMLPUBLIC"-//W3C//DTDHTML4.0Transitional//EN">
37
38 39http-equiv=3DContent-Type> 40 ............ 79 80 81--=====002_Dragon307572345230_=====-- 82 例3 1Return-Path: 2Delivered-To: bhw98@ 3Received: (qmail75513invokedbyalias);20May200202: 19: 53-0000 4Received: fromunknown(HELObluesky)(61.155.118.135) 5by202.106.187.143withSMTP;20May200202: 19: 53-0000 6Message-ID: <007f01c3111c$742fec00$0100007f@bluesky> 7From: "=? gb2312? B? wLbAtrXEzOwNCg==? =" 8To: "bhw98" 9Cc: 10Subject: =? gb2312? B? ztK1xLbgtK6/2rPM0PI=? = 11Date: Sat,20May200210: 03: 36+0800 12MIME-Version: 1.0 13Content-Type: multipart/mixed; 14boundary="----=_NextPart_000_007A_01C3115F.80DFC5E0" 15X-Priority: 3 16X-MSMail-Priority: Normal 17X-Mailer: MicrosoftOutlookExpress5.00.2919.6700 18X-MimeOLE: ProducedByMicrosoftMimeOLEV5.00.2919.6700 19 20Thisisamulti-partmessageinMIMEformat. 21 22------=_NextPart_000_007A_01C3115F.80DFC5E0 23Content-Type: multipart/related;type="multipart/alternative"; 24boundary="----=_NextPart_001_007B_01C3115F.80DFC5E0" 25 26 27------=_NextPart_001_007B_01C3115F.80DFC5E0 28Content-Type: multipart/alternative; 29boundary="----=_NextPart_002_007C_01C3115F.80DFC5E0" 30 31------=_NextPart_002_007C_01C3115F.80DFC5E0 32Content-Type: text/plain;charset="gb2312" 33Content-Transfer-Encoding: quoted-printable 34 35bhw98,=C4=E3=BA=C3! 36=D5=E2=CA=C7=CE=D2=D0=B4=B5=C4=B6=E0=B4=AE=BF=DA=CD=A8=D0=C5=B5=C4=B3=CC=D0= 37=F2,=C7=EB=D6=B8=BD=CC! 38 39 40------=_NextPart_002_007C_01C3115F.80DFC5E0 41Content-Type: text/html;charset="gb2312" 42Content-Transfer-Encoding: quoted-printable 43 44 DOCTYPEHTMLPUBLIC"-//W3C//DTDHTML4.0Transitional//EN"> 45
46
47
52
53 007901c3111c$72b978a0$0100007f@bluesky= 54bgColor=3D#ffffff> 55 56 57 =D5=E2=CA=C7=CE=D2=D0=B4=B5=C4=B6=E0=B4=AE=BF=DA=CD=A8=D0=C5=B5=C4=B3=CC= 58=D0=F2,=C7=EB=D6=B8=BD=CC!
59
60
61------=_NextPart_002_007C_01C3115F.80DFC5E0--
62
63------=_NextPart_001_007B_01C3115F.80DFC5E0
64Content-Type:
image/jpeg;name="=?
gb2312?
B?
x+fAyrGzvrAuSlBH?
="
65Content-Transfer-Encoding:
base64
66Content-ID:
<007901c3111c$72b978a0$0100007f@bluesky>
67
68/9j/4AAQSkZJRgABAgEASABIAAD/7QVoUGhvdG9zaG9wIDMuMAA4QklNA+0AAAAAABAASAAAAAEA
69AQBIAAAAAQABOEJJTQPzAAAAAAAIAAAAAAAAAAA4QklNBAoAAAAAAAEAADhCSU0nEAAAAAAACgAB
70AAAAAAAAAAI4QklNA/UAAAAAAEgAL2ZmAAEAbGZmAAYAAAAAAAEAL2ZmAAEAoZmaAAYAAAAAAAEA
............
169RxVw98Vawq12xQ44q0cKtHFDWKGsKt4EtiuKt4q//9k=
170
171------=_NextPart_001_007B_01C3115F.80DFC5E0--
172
173------=_NextPart_000_007A_01C3115F.80DFC5E0
174Content-Type:
application/msword;name="readme.doc"
175Content-Transfer-Encoding:
base64
176Content-Disposition:
attachment;filename="readme.doc"
177
1780M8R4KGxGuEAAAAAAAAAAAAAAAAAAAAAPgADAP7/CQAGAAAAAAAAAAAAAAABAAAAJgAAAAAAAAAA
179EAAAKAAAAAEAAAD+////AAAAACUAAAD/////////////////////////////////////////////
180////////////////////////////////////////////////////////////////////////////
............
1688AAAAAAAAAAAAAAAAAAA=
1689
1690------=_NextPart_000_007A_01C3115F.80DFC5E0
1691Content-Type:
application/x-zip-compressed;
1692name="=?
gb2312?
B?
tuC0rr/azajQxbXE1LTC6y56aXA=?
="
1693Content-Transfer-Encoding:
base64
1694Content-Disposition:
attachment;
1695filename="=?
gb2312?
B?
tuC0rr/azajQxbXE1LTC6y56aXA=?
="
1696
1697UEsDBBQAAAAIAFKAoi7qOMOvLw0AAABWAAAUAAAAtuC0rr/azajQxbXE1LTC6y5kb2PtXHtwVNUZ
1698/+4+kk3IQoAkBkRYQkSgbrKb7IYNEMwmm6ckG0jCI0boZneTbJJ9sNlAEsdOtFqd8Z846tQ6PhB1
1699hrZTJoK0Vhgf1aGt4rMy6D8tdugfTjuOpcBIR9j+vvsIy4YkRNTRen87v/ud53cee+6557vn7L73
............
3125zajQxbXE1LTC6y5kb2NQSwUGAAAAAAEAAQBCAAAAYQ0AAA==
3126
3127------=_NextPart_000_007A_01C3115F.80DFC5E0--
3128
Q在开始研究MIME邮件的时候,如何得到这样的源码?
A一些功能比较完善的邮件客户端软件,如微软的OutlookExpress,国产的Foxmail等,都提供了查看和保存邮件源码(原始信息)的功能。
在Foxmail中,选择邮件列表右键菜单的“原始信息”进行查看,主菜单的“文件-导出”进行保存。
在OutlookExpress中,对应的操作分别是“属性”和“另存为”。
所保存的.eml文件,可以调用这些程序打开。
Q请介绍一下MIME邮件的组成?
A总体来说,MIME消息由消息头和消息体两大部分组成。
现在我们关注的是MIME邮件,因此在以下的讨论中姑且称“消息”为“邮件”。
在上面的例子中,例1的1-6行,例2的1—8行,例3的1-18行,是邮件头;例1的8—9行,例2的10—82行,例3的20—3128行,是邮件体。
邮件头与邮件体之间以空行进行分隔,如例1的第7行,例2的第9行,例3的第19行。
邮件头中不允许出现空行。
有一些邮件不能被邮件客户端软件识别,显示的是原始码,就是因为首行是空行。
邮件头包含了发件人、收件人、主题、时间、MIME版本、邮件内容的类型等重要信息。
每条信息称为一个域,由域名后加“:
”和信息内容构成,可以是一行,较长的也可以占用多行。
域的首行必须“顶头”写,即左边不能有空白字符(空格和制表符);续行则必须以空白字符打头,且第一个空白字符不是信息本身固有的,解码时要过滤掉。
如例2的7-8行,例3的4-5行,13-14行,分别属于一个域。
邮件体包含邮件的内容,它的类型由邮件头的“Content-Type”域指出。
常见的简单类型有text/plain(纯文本)和text/html(超文本)。
例2和例3中出现的multipart类型,是MIME邮件的精髓。
邮件体被分为多个段,每个段又包含段头和段体两部分,这两部分之间也以空行分隔。
常见的multipart类型有三种:
multipart/mixed,multipart/related和multipart/alternative。
从它们的名称,不难推知这些类型各自的含义和用处。
它们之间的层次关系可归纳为下图所示:
+-------------------------multipart/mixed----------------------------+
||
|+-----------------multipart/related------------------+|
||||
||+-----multipart/alternative------++----------+|+------+|
|||||内嵌资源|||附件||
|||+------------++------------+|+----------+|+------+|
||||纯文本正文||超文本正文||||
|||+------------++------------+|+----------+|+------+|
|||||内嵌资源|||附件||
||+----------------------------------++----------+|+------+|
||||
|+------------------------------------------------------+|
||
+----------------------------------------------------------------------+
可以看出,如果在邮件中要添加附件,必须定义multipart/mixed段;如果存在内嵌资源,至少要定义multipart/related段;如果纯文本与超文本共存,至少要定义multipart/alternative段。
什么是“至少”?
举个例子说,如果只有纯文本与超文本正文,那么在邮件头中将类型扩大化,定义为multipart/related,甚至multipart/mixed,都是允许的。
multipart诸类型的共同特征是,在段头指定“boundary”参数字符串,段体内的每个子段以此串定界。
所有的子段都以“--”+boundary行开始,父段则以“--”+boundary+“--”行结束。
段与段之间也以空行分隔。
在邮件体是multipart类型的情况下,邮件体的开始部分(第一个“--”+boundary行之前)可以有一些附加的文本行,相当于注释,解码时应忽略。
段间也可以有一些附加的文本行,不会显示出来,如果有兴趣,不妨验证一下。
结合boundary定界和multipart层次关系图,我们分析一下例2和例3的邮件体层次与段嵌套关系。
在例2中,10-12行是附加文本行,13-82行是multipart/alternative型的段,包含两个子段:
13-30行是纯文本正文,32-79行是超文本正文。
在例3中,20-21行是附加文本行,22-3127行是multipart/mixed型的段,包含3个子段:
22-171行是multipart/related段,173-1688行与1690-3125行是两个附件。
multipart/related段又包含两个子段:
27-61行是multipart/alternative段,63-169行是一个内嵌资源(图片)。
multipart/alternative段又包含两个子段:
31-48行是纯文本正文,40-59行是超文本正文。
例1只有纯文本正文,实际上属于multipart层次关系图中的一个特殊情况。
如果非要避简就繁,写成下面的形式,也是完全符合MIME精神的。
Date:
Thu,18Apr200209:
32:
45+0800
From:
To:
Subject:
Test
Mime-Version:
1.0
Content-Type:
multipart/alternative;boundary="{[(^_^)]}"
--{[(^_^)]}
Content-Type:
text/plain;charset="iso-8859-1"
Content-Transfer-Encoding:
7bit
Thisisasimplemail.
--{[(^_^)]}--
Q在邮件头和段头中,有哪一些常见的域?
A在邮件头中,有很多从RFC822沿用的域名,MIME也增加了一些。
常见的标准域名和含义如下
域名
含义
添加者
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等,通常在接收和发送邮件的是同一程序时才能理解它们的意义。
在段头中,大致有如下一些域
域名
含义
Content-Type
段体的类型
Content-Transfer-Encoding
段体的传输编码方式
Content-Disposition
段体的安排方式
Content-ID
段体的ID
Content-Location
段体的位置(路径)
Content-Base
段体的基位置
有的域除了值之外,还带有参数。
值与参数、参数与参数之间以“;”分隔。
参数名与参数值之间以“=”分隔。
如例3的28-29行,Content-Type域的值为“multipart/alternative”,此外有一个参数boundary,值为"----=_NextPart_002_007C_01C3115F.80DFC5E0"。
又如例3的第176行,Content-Disposition域的值为“attachment”,此外有一个参数filename,值为“readme.doc”。
QContent-Type以及它们的参数有哪些形式?
AContent-Type都是“主类型/子类型”的形式。
主类型有text,image,audio,video,application,multipart,message等,分别表示文本、图片、音频、视频、应用、
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- MIME 关于 附件 传输