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

MIME中的Multipart/mixed

 
阅读更多
总体来说,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/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精神的。
分享到:
评论

相关推荐

    javax.activation.UnsupportedDataTypeException: no object DCH for MIME type

    javax.activation.UnsupportedDataTypeException: no object DCH for MIME type multipart/mixed; boundary="----=_Part_0_1760344884.1407394057461" 第一步:需要先grantq权限: EXEC dbms_java.grant_...

    DotNetOpenMail

    multipart/related and multipart/mixed MIME messages in various character sets and various mime encodings such as quoted-printable, 7bit, 8bit and base64 without needing to know too much about the ...

    MIME解码

    如果邮件包含多部分,通常会有一个`multipart/*`类型,如`multipart/mixed`或`multipart/alternative`,表明邮件由多个部分组成。 2. **识别MIME类型**:对于每个部分,根据Content-Type确定其具体类型,如`text/...

    mime邮件-mime邮件头介绍

    在示例中,`Content-Type: multipart/mixed; boundary="IMA.Boundary.750407228"`表明邮件包含多个部分,且它们之间的分隔符是`IMA.Boundary.750407228`。`multipart/mixed`表示可以混合各种类型的内容。 3. **...

    服务器推送技术Server Push详解

    - **`multipart/x-mixed-replace` MIME类型**:与`multipart/mixed`不同的是,`multipart/x-mixed-replace`中的每个部分都会替换前面的部分。这种方式非常适合动态更新场景,例如实时数据流或定时刷新的页面内容。 ...

    介绍MIME格式,便于解析

    5. **多部分结构**:`multipart`类型允许将邮件内容分割成多个部分,每个部分可以有自己的MIME类型和编码,如`multipart/alternative`、`multipart/mixed`和`multipart/related`等。 总的来说,MIME格式极大地扩展...

    MIME相关, MIME协议详解

    4. **多部分消息**:MIME允许在一个邮件中包含多个部分,通过“multipart”类型进行分隔。比如,“multipart/mixed”用于混合不同类型的附件,“multipart/alternative”则用于提供同内容的不同表现形式(如纯文本和...

    多用途互联网邮件扩展(MIME)

    4. **分块类型(Multipart)**:用于组合不同类型的数据,如multipart/mixed、multipart/alternative和multipart/related,分别用于混合、替代和关联的数据组合。 5. **Message类型**:用于嵌套邮件,允许在一个邮件...

    发送带附件的邮件的原理及实现方法

    发送带有附件的电子邮件涉及到了多个关键技术点,包括邮件格式的理解、MIME类型的应用以及多部分混合(multipart/mixed)内容类型的构建等。 **1. MIME类型与邮件格式** 电子邮件的标准格式是基于RFC 5322定义的,...

    Python期末大作业格式样本——不带批注.pdf

    `email.mime`子模块提供了创建不同MIME类型的邮件对象的方法,例如`email.mime.text.MIMEText`用于创建纯文本邮件,`email.mime.multipart`则用于处理包含多个部分的邮件,比如混合型(`multipart/mixed`)、相关型...

    MIME 邮件格式分析类

    MIME邮件结构通常由一系列的“消息/部分”组成,每个部分可以有自己的MIME类型,如"multipart/mixed"(混合内容)、"text/plain"(纯文本)或"image/jpeg"(JPEG图片)。每个部分可以包含子部分,形成一个多级的树状...

    MIME手册

    - **多部分类**:如 `multipart/mixed`,用于组合多种类型的数据。 **3. MIME类型注册与自定义** MIME类型不是随意定义的,它们在IETF(互联网工程任务组)的控制下进行注册。新类型必须遵循一定的规范,如`...

    rfc2046中文版

    通过定义一系列标准化的媒体类型和复合媒体类型值,MIME不仅解决了非ASCII字符集的问题,还允许用户在电子邮件中传输多媒体数据,从而显著提高了电子邮件通信的能力。此外,MIME的设计还考虑到了与现有系统的兼容性...

    使用PHP mail()函数发送有附件的邮件

    在邮件头中设置 `Content-Type` 为 `multipart/mixed`,并指定分隔符。 2. **创建邮件正文**:在邮件的主体部分,首先添加纯文本的邮件内容。这部分应该设置 `Content-Type: text/plain`,并指定分隔符。例如: ``...

    C#实现邮件内容 MIME信息的编码/解码

    multipart mixed" ; generate a boundary string automatically if the parameter is NULL mail SetBoundary null ; Add a text body part default Content Type is "text plain" default ...

    一个简单的SMTP发邮件工具源码,是VB+WINSOCK控件做的

    此外,为了支持HTML格式的邮件,源码可能还会涉及到MIME的multipart/mixed或multipart/alternative内容类型。 对于"测试发电子邮件"这个文件,这可能是VB程序中用于测试邮件发送功能的一个模块或脚本,可能包含了...

    邮件MIME的解析

    2. **内容类型识别**:MIME邮件头部会指定主体内容的类型,如"Content-Type: text/plain"或"Content-Type: multipart/mixed"。这一步骤用于确定邮件主体的结构和内容。 3. **编码解码**:MIME允许使用多种编码方法...

    lotus Domino开发域相关文档--富域加图片

    接着,我们需要创建一个 MIME 实体对象,并设置其 Content-Type 为 multipart/mixed。这将允许我们将图片嵌入到富域中。 接下来,我们需要创建一个子实体对象,并将其内容设置为图片文件的内容。然后,我们需要将子...

Global site tag (gtag.js) - Google Analytics