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字符后再发送,邮件阅读程序则按照相应的解码方式为BASE64和Quoted-printable
BASE64基本原理是将一组连续的字节数据按6个bit位进行分组,然后对每组数据用一个ASCII字符来表示。6个bit位最多表示2^6=64个数值,因此可以使用64个ASCII字符对应这64个数值,"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz+/",每个字符表示的数值就是该字符在上面的排列中的索引号,索引号从0开始编号
扩展SMTP协议允许直接在邮件中传递二进制数据,而不用对它们进行邮件编码,称之为8bit编码,
没有进行邮件编码的纯ASCII码字符的邮件称之为7bit编码
MIME消息体的邮件编码方式通过MIME消息头中的Content-Transfer-Encoding 头字段指定