邮件的组织结构

时间:2021-10-18 18:11:37

邮件的组织结构

Return-path  该字段代表邮件的回复地址,该字段内容由接收邮件的SMTP服务器填写,接收邮件的SMTP服务器从邮件发送程序发出的 mail from 命令中获得该字段内容

Received 该字段的基本格式为 received from A by B for C,A为发送方,B为接收方,C为收件人的邮箱地址。该字段内容由接收邮件的SMTP服务器服务器填写,常常被用来追踪邮件传输的路线和分析邮件的来源。

From 指定发件人地址

To 指定收件人地址

Subject 邮件的主题,如果主题内容中包含有ASCII码以外的字符,通常要对其内容进行编码

date 邮件的发送时间

cc 邮件的抄送地址

bcc 邮件的暗送地址


2. MIME协议(Multipurpose Internet Mail Extension,多用途Internet邮件扩展)

用于定义复杂邮件体的格式,它可以表达多段平行的文本内容和非文本的邮件内容,也可以避免邮件内容在传输过程中发生信息丢失。 MIME协议不是对RFC822邮件格式的升级和替代,而是基于RFC822邮件格式的扩展应用。 RFC822定义了邮件内容的格式和邮件头字段的详细细节,MIME协议则是定义了如何在邮件体部分表达出丰富多样的数据内容
一个采用了MIME协议的电子邮件就叫MIME邮件,它在RFC822文档中定义的邮件头字段基础上,扩充了一些自己专用的邮件头字段,例如 ,MIME-version  指定MIME协议的版本,Content-Type 指定邮件体的MIME类型,Content-Transfer-Encoding指定编码方法

3.MIME邮件的组织结构

邮件的组织结构邮件的组织结构

一封MIME邮件可以由多个不同类型的MIME消息组合而成,一个MIME消息表示邮件中的一个基本MIME资源或若干基本MIME消息的组合体。

每个MIME消息的数据格式与RFC822数据格式相似,包括头和体两部分,分别称为MIME消息头和MIME消息体,它们之间使用空行分割。

MIME消息体中包含了资源的具体内容,MIME消息头则包含对资源的描述信息。


4.MIME消息的头字段

1. Content-Type

对于表示某个具体资源的MIME消息,它的消息头中需要指定资源的数据类型;对于MIME组合消息,它的消息头中需要指定组合关系。

具体资源的数据类型和组合消息的组合关系,都是通过消息头中的Content-Type头字段来指定,内容以“主类型/子类型”的形式出现,主类型有text、image、audio、video、application、multipart、message等,分别表示文本、图片、音频、视频、应用程序、组合结构、消息等。每个主类型下面有多个子类型,例如 text主类型包含plain、html、xml、css等子类型,multipart主类型用于表示MIME组合消息,它是MIME协议中最重要的一种类型。


一封MIME邮件中的MIME消息可以有三种组合关系:混合、关联、选择,它们对应MIME类型如下:

multipart/mixed 表示消息体中的内容是混合组合类型,内容可以是文本、声音和附件等不同邮件内容的混合体

multipart/related 某些资源(例如HTML代码)要引用(依赖)另外的资源(图像数据),引用资源与被引用的资源必须组合成multipart/related类型的MIME组合消息

multipart/alternative 选择组合类型


Content-Type除了可以定义消息体的MIME类型外,还可以在MIME类型后面包含相应的属性,属性以“属性名=属性值”的形式出现,属性与MIME类型之间采用分号(;)分割

邮件的组织结构


2.其他字段

Content-Transfer-Encoding 指定MIME消息体中的内容所采用的邮件编码方式

Content-Disposition 指定邮件附件阅读程序处理数据内容的方式,有inline(直接处理)和attachment(当做附件处理,在其后还可以指定filename属性)两种标准方式,

Content-ID 用于为"multipart/related"组合消息中的内嵌资源指定一个唯一标识号,在HTML格式的正文中可以使用 cid:唯一标识号 来引用该内嵌资源

Content-Location 为内嵌资源设置一个URI地址,在HTML格式的正文中也可以使用这个URI来引用该内嵌资源

Content-Base 用于为内嵌资源设置一个基准路径,只有这样,Content-Location设置的URI才可以采用相对地址


5.MIME邮件的编码方式

由于每个ASCII码字符只占用一个字节(8个bit位),且最高bit位总为0,即ASCII码字符中的有真正意义的信息只是后面的7个低bit位,而传统的SMTP协议又是基于ASCII码字符设计的,因此,一些基于传统SMTP协议设计的SMTP服务器在处理邮件内容时只取每个字节的7个低bit位进行处理,而将最高bit位忽略不计。显然,这样的SMTP服务器在处理包含非ASCII码字符的邮件内容时,会出现严重的问题,这就限制了邮件中只出现英文的ASCII码字符,而不能出现中文字符或二进制数据。

为了能够在邮件内容中包含中文、图像或声音等非ASCII字符的数据,采用某种编码方式将非ASCII码字符的数据转换成可打印的ASCII字符后再发送,邮件阅读程序则按照相应的解码方式为BASE64Quoted-printable

BASE64基本原理是将一组连续的字节数据按6个bit位进行分组,然后对每组数据用一个ASCII字符来表示。6个bit位最多表示2^6=64个数值,因此可以使用64个ASCII字符对应这64个数值,"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz+/",每个字符表示的数值就是该字符在上面的排列中的索引号,索引号从0开始编号


扩展SMTP协议允许直接在邮件中传递二进制数据,而不用对它们进行邮件编码,称之为8bit编码

没有进行邮件编码的纯ASCII码字符的邮件称之为7bit编码


MIME消息体的邮件编码方式通过MIME消息头中的Content-Transfer-Encoding 头字段指定