邮件头构造分析

目录

一.转发

 "Resent-":

二.路径字段

"Return-Path":

“Reply-To":

”Received":

三.信息源字段

"From/Resent-From":

”Sender/Resent-Sender"

"Reply-To/Resent-Reply-To"

“DKIM-Signature :”

四.接受者字段

“To/Resent-To”:

“Cc/Resent-Cc”:

“Bcc/Resent-Bcc”:

五.参考字段

“Message-ID/Resent-Message-ID” :

“In-Reply-To”

“Reference”

“Keywords”

"Subject: "

"x-......":

六.重要参数

“MIME-Version” :

“Content-type”:

Content-Transfer-Encoding


邮件头字段按理说是可以无序的,但是邮件协议中推荐的做法是在放置邮件字段时,邮件按照以下顺序安排:”Return-Path”, “Received”, “Date”, “From”, “Subject”, “Sender”, “To”, “cc”, 等等。

下面我们按照功能分类讲解各个字段

一.转发

 "Resent-":

一些系统允许接受者转发信息,保留原有的邮件头,仅仅添加些新的字段,这些字段以“Resent-"为前缀。及前缀”Resent-"的字段表示接受者转发的原信息

二.路径字段

路径信息用来追踪信息的发送者,”via" "with"等是记录变量

"Return-Path":

该字段由信息的最后发送者添加,是关于信息原始来源和回溯路径

标识指定的退信地址,一般情况下,不添加Return-path字段,退信默认退到Sender标识的地址。当Sender和From一致时,退信默认退到From标识的地址。

“Reply-To":

表示回复地址,由发件方编辑,希望收件人回复邮件时回复到指定的地址。一般情况下,如不额外添加Reply-to字段,收件人回复邮件时,将回复到原邮件From字段标识的地址

”Received":

由每个中继服务站添加,用于帮助追踪传输中出现的错误。字段内容包括,发送、接收的主机和接收时间。参数via 用于记录信息发送后经过的物理站点,”with” 指示了使用的邮件、连接的协议。参数 id 用于标识邮件。参数for 用于记录发送者的分发的目的地址。

路由信息,记录了邮件传递过程。

特点:

  1. 整个邮件原文中,只有Received段是不由发件方编辑的,是由接收方加载的
  2. 由所经过的路由在信头最顶部添加
  3. 每经过一个处理,必须在最上层添加一个Received,且不得改变其他Received的顺序

三.信息源字段

"From/Resent-From":

与sender必须存在至少一个

表示一个或多个邮件的作者,显示在正文的发件人。由发件方编辑,例如发垃圾的就会将此字段编辑成不存在的地址;发诈骗邮件的就会将此字段编辑成被冒充的邮件地址。(就是说这个可以伪造)

”Sender/Resent-Sender"

表示邮件的实际投递者(只能是一个),一般由收件方添加,邮件服务商在收到邮件后会将邮件会话里面的实际投递者与信头From字段标识的发件这进行比较,如不一致则在信头下方加入Sender字段标识邮件实际投递者,但这个字段也可由发件方决定的。

"Reply-To/Resent-Reply-To"

当自动生成回复信息的地址列表时,应当注意:如果没有”Sender”,将会使用”From” . 接收者在回复信息时,邮件sender中的信息不会被自动使用。如果”Reply-To” 字段存在,将使用该字段信息,而不是”From”字段。如果有”From” 而没有”Reply-To” ,将使用”From”。

“DKIM-Signature :”

表示DKIM签名。

DKIM ,电子邮件验证标准——域名密钥识别邮件标准。 DKIM让企业可以把加密签名插入到发送的电子邮件中,然后把该签名与域名关联起来。签名随电子邮件一起传送,而不管是沿着网络上的哪条路径传送,电子邮件收件人则可以使用签名来证实邮件确实来自该企业。

四.接受者字段

“To/Resent-To”:

发送

后面填一个或多个收件人的电子邮箱地址

“Cc/Resent-Cc”:

抄送

“Bcc/Resent-Bcc”:

暗中抄送

抄送和暗抄送的区别:当你使用cc抄送一封邮件给A,B,C三个朋友,他们收到邮件后,可以通过收 件人列表知道你把这封邮件发给谁了,而使用bcc暗抄送虽然也可以看到cc列表则无法看到bcc列表。

CC在以下情况下有用:

您希望其他人收到电子邮件的副本,但他们不是主要收件人之一。

您希望邮件的收件人知道发送邮件的其他人。

BCC在以下情况下很有用:

您希望其他人收到电子邮件,但您不希望电子邮件的主要收件人看到您已将此副本发送给其他人。 例如,如果您遇到同事问题,您可能会向他们发送一封电子邮件,并向人力资源部门发送密码。 人力资源部门会收到一份记录,但你的同事不会意识到这一点。

你想发送一个电子邮件的副本给大量的人。 例如,如果您的邮件列表中包含大量人员,则可以将其包含在BCC字段中。 没有人能够看到其他人的电子邮件地址。 如果您是抄送这些人,那么您将会公开他们的电子邮件地址,他们会在他们的电子邮件程序中看到一长串抄送的电子邮件。 您甚至可以将自己的电子邮件地址放在“收件人”字段中,并在“密件抄送”字段中包含所有其他地址,从而隐藏每个人的电子邮件地址。

五.参考字段

“Message-ID/Resent-Message-ID” :

给邮件分配的号码标识,一直伴随整个邮件,有时会包含发送者邮件地址。

“In-Reply-To”

“Reference”

“Keywords”

"Subject: "

邮件的主体,反映了邮件的主要内容,方便用户查找

"x-......":

用户自定义的参数用x来当前缀

六.重要参数

“MIME-Version” :

所使用的网络邮件格式标准版本 一般是1.0

“Content-type”:

邮件内容数据的类型,包括类型标识(type)和子类型标识(subtype),前者类型标识(type)声明了数据的类型,后者子类型标识(subtype)为这种数据类型指定了特定的格式。

比如 content-type:image/xyz:

 说明数据类型是图像型(image)的,图像数据格式是xyz。

类型标识(type)与子类型标识(subtype)由斜杠”/”来分割。

类型之后是参数集合parameter

主类型 常见属性 参数含义
text charset 文本信息所使用的字符集
image name 图像的名称
application name 应用程序的名称
multipart boundary 邮件分段边界标识

邮件的数据类型分为七种,分别是: 文本(Text)、多文档(mulipart)、消息(Message)、图像(Image)音频(audio)、视频(Video)、应用(Application)。

文本(Text)—文字类信息,其基本的子类标识是”Plain”,即没有格式的文本。除了需要支持指定的字符集,获得文本信息不需要特殊的软件。文本子类用于多信息文本,在其上应用文字处理软件可以美化文本的外观,但文本的内容及涵义无需任何软件。因此子类型包括任何可读得文字处理格式。

多文档(mulipart) —包含具有独立数据类型的多个部分。其中定义了4个最原始的子类型:mixed(基本类型), alternative(具有可供选择的多个格式), parallel(同时阅览的部分), digest(都是消息型的多部内容).

消息(Message) – 未封装的消息。该类型的消息体本身部分或全部都是RFC822格式。基本子类是 ” rfc822” 。”partial”表示局部消息,允许邮件传输中可分块进行。”External-body” 表示扩展大邮件。 图形(Image) – 需要有现实设备。子类主要是两种应用广泛的图形格式:jpeg, gif。

声频(audio) – 基本子类 ”basic”, 需要声频输出设备。

视频(Video) – 基本子雷 ”mpeg”, 需要视频显示设备。

应用(Application) – 其他类型数据,无法解析的二进制数据。基本子类 ”octet-stream” ,用于不可解析的二进制数据情况,为用户提供将信息写入文件的方法。”PostScript” 表示传输脚本文档。

Content-type类型默认为Content-type : text/plain; charset = us-ascii 。如果content-type没有明确制定,那么系统会默认为该类型。

当遇到未知的类型时,将会把未知类型当作 ”application/octet-stream” 对待。

可以看出,如果在邮件中要添加附件,必须定义multipart/mixed段;如果存在内嵌资源,至少要定义multipart/related段;如果纯文本与超文本共存,至少要定义multipart/alternative段。什么是“至少”?举个例子说,如果只有纯文本与超文本正文,那么在邮件头中将类型扩大化,定义为multipart/related,甚至multipart/mixed,都是允许的。
 

Content-Transfer-Encoding

它表示了这个部分文档的编码方式。只有识别了这个说明,才能用正确的解码方式实现对其解码。 Content-Transfer-Encoding共有Base64, Quoted-printable, 7bit, 8bit, Binary等几种。 其中7bit是缺省的编码方式。电子邮件源码最初设计为全部是可打印的ASCII码的形式。 非ASCII码的文本或数据要编码成要求的格式。 Base64, Quoted-Printable是在非英语国家使用最广使的编码方式。 Binary方式只具有象征意义,而没有任何实用价值。

你可能感兴趣的:(网络安全,java,前端,服务器,web安全)