最新消息: USBMI致力于为网友们分享Windows、安卓、IOS等主流手机系统相关的资讯以及评测、同时提供相关教程、应用、软件下载等服务。

聚合邮件(aggregatedmessage)

IT圈 admin 26浏览 0评论

2024年5月7日发(作者:皮寄南)

聚合邮件(aggregated message)

假如我们发送一封包含网页(html文档)的电子邮件,并且希望接收方的用户邮件软

件能够显示这张网页,那么邮件就必须有聚合资源的机制。我们知道,html文档中往往包

含图象、视频片断、Applet等数据资源,这些数据资源并不是包含在html文档中的,而是

存放在Web服务器上,html用URI指出获取这些资源的方法。例如,在html中,图象元素

的语法是

URI

>,其中的

URI

是图象资源的URI,通常是http命名方案的URI,

浏览器据此可获得图象数据并显示在网页窗口上。

又如Applet的语法是

URI

code=

class_file

>,其中的

URI

指出

Applet代码的存放位置,

class_file

指出此处要执行的类文件名。浏览器获得html文档之

后,必须根据这些信息从网络上获取代码,然后才能执行这些代码。

我们将包含图象、Applet等资源的html文档称为根数据(root resource),将其中包含

的资源称为附属数据(subsidiary resource)。并非只有网页才包含附属数据,其它格式的文

档(例如XML、pdf文档)也有这种情况。聚合邮件是用来包含这类文档的邮件。

不能要求用户邮件软件也像浏览器那样通过网络获取附属数据,因为用户经常要在脱机

的环境中阅读已下载到本地的邮件。因此,必须在邮件中同时包含根数据和附属数据。我们

可以利用分块邮件,将根数据和各种附属数据分别存放在各自的块中。分块邮件的每一块都

可以指定块内数据类型和传送编码,完全可以包含各种类型的附属资源。但是这种邮件内各

块是存在引用关系的,必须由根数据块引用附属数据块中的数据,因此必须指出哪个数据块

是根数据,哪些是附属数据,以及根数据如何引用附属数据。MIME已定义的分块类型

Multipart/*并没有反映这种关系,为此,RFC2387提出一种新的分块类型Multipart/Related,

RFC2392提出一种命名方案为mid和cid的URI,用来标识被引用的附属数据块,而RFC2557

则定义一个新的MIME头段Content-Location来标识数据块。

7.1 Multipart/Related

Multipart/Related是一种分块数据类型,用在头段Content-Type中,其语法是

Content-type: Multipart/Related *(;

params

)

其中

params

是参数。可以使用多个参数,每个参数的格式都是“参数名 = 参数值”的形

式。Multipart/Related类型使用的参数有:

boundary:块分界字符串,所有的Multipart/*类型都必须有这个参数,详见4.4.1

节。

type:参数值是MIME媒体类型,例如text/html,text/plain等。这个参数用来指出

根数据的类型。这个参数是必有的。虽然根数据块内也可以用头段Content-type指

出媒体类型,但是这个参数使得用户邮件软件一开始就可以知道根数据块的类型。

• start:参数值是标识根数据块的URI,其作用是指出当前邮件中哪一块是根数据块。

这个参数是可选的,如果没有这个参数,则默认邮件中第一块为根数据块。

• strat-info:为邮件应用程序提供进一步的信息,例如一些可执行的命令。这个参数

是可选的,其参数值由应用程序自行解释。

本章第六节提到头段Content-Disposition,这个头段可用来指出块内数据是inline还是

attachment。当邮件正文为Multipart/Related时,所有的块都应该是inline,因此头段

Content-Disposition在此处是没有意义的。但是仍然允许在块内使用这个头段,因为那些不

知道Multipart/Related类型的软件将会将邮件作为Multipart/mixed处理,这时

Content-Disposition可以告诉它们数据的处理方式。

支持Multipart/Related类型的软件则必须忽略块内的Content-Disposition头段。

7.2 Content-ID

为了让根数据引用附属数据,可以在附属数据块中用头段Content-ID指定一个URI,然

后在根数据中按照这个URI引用数据。

例如,如果我们在邮件中包含一个html文档,则其中可能包含了引用附属数据的URI,

例如

其中的/images/本身就是一个URI,但这种URI并不是指向聚合邮

件内的数据,而是指向网络上的某个位置(头段Content-Location可利用这种URI,稍后介

绍)。使用Content-ID的方法是改写根数据中的URI,使之指向邮件内的某一块。

这种URI有两种命名方案:cid和mid。cid用来标识邮件内的一个数据块,mid则用来

标识一封邮件及其中的某一块。

cid的语法是:

cid:

localpart

@

domain

简单地说,就是“cid:”后面再加上一个“邮箱地址”,不过其中的

localpart

并非用户名,

而是作为ID用的标识字符串,这串ID字符的唯一性由设计它的主机负责,

domain

是该主

机的域名。由于域名是唯一的,

localpart

在域名对应的主机上也是唯一的,所以这种URI

是全球唯一的。

当用cid标识数据块时,块内用头段Content-ID指出该块的cid,但要去掉开头的“cid:”

并且loacalpart@domian要用一对尖括号括起来,而根数据中对应的cid则使用原状。

例6:使用cid的聚合邮件。

From:************

To:************

MIME-Version: 1.0

Content-type: multipart/related; boundary="simple-example";

type=text/html

-- simple-example

Content-type: text/html; charset="GB2312"

Content-Transfer-Encoding: 8bit

此处为html内容,其中包括一幅图象,其中的URI已设为cid:

--simple-example

Content-ID:

Content-type: image/gif

Content-Transfer-Encoding: base64

--simple-example--

命名方案mid的URI语法为:

2024年5月7日发(作者:皮寄南)

聚合邮件(aggregated message)

假如我们发送一封包含网页(html文档)的电子邮件,并且希望接收方的用户邮件软

件能够显示这张网页,那么邮件就必须有聚合资源的机制。我们知道,html文档中往往包

含图象、视频片断、Applet等数据资源,这些数据资源并不是包含在html文档中的,而是

存放在Web服务器上,html用URI指出获取这些资源的方法。例如,在html中,图象元素

的语法是

URI

>,其中的

URI

是图象资源的URI,通常是http命名方案的URI,

浏览器据此可获得图象数据并显示在网页窗口上。

又如Applet的语法是

URI

code=

class_file

>,其中的

URI

指出

Applet代码的存放位置,

class_file

指出此处要执行的类文件名。浏览器获得html文档之

后,必须根据这些信息从网络上获取代码,然后才能执行这些代码。

我们将包含图象、Applet等资源的html文档称为根数据(root resource),将其中包含

的资源称为附属数据(subsidiary resource)。并非只有网页才包含附属数据,其它格式的文

档(例如XML、pdf文档)也有这种情况。聚合邮件是用来包含这类文档的邮件。

不能要求用户邮件软件也像浏览器那样通过网络获取附属数据,因为用户经常要在脱机

的环境中阅读已下载到本地的邮件。因此,必须在邮件中同时包含根数据和附属数据。我们

可以利用分块邮件,将根数据和各种附属数据分别存放在各自的块中。分块邮件的每一块都

可以指定块内数据类型和传送编码,完全可以包含各种类型的附属资源。但是这种邮件内各

块是存在引用关系的,必须由根数据块引用附属数据块中的数据,因此必须指出哪个数据块

是根数据,哪些是附属数据,以及根数据如何引用附属数据。MIME已定义的分块类型

Multipart/*并没有反映这种关系,为此,RFC2387提出一种新的分块类型Multipart/Related,

RFC2392提出一种命名方案为mid和cid的URI,用来标识被引用的附属数据块,而RFC2557

则定义一个新的MIME头段Content-Location来标识数据块。

7.1 Multipart/Related

Multipart/Related是一种分块数据类型,用在头段Content-Type中,其语法是

Content-type: Multipart/Related *(;

params

)

其中

params

是参数。可以使用多个参数,每个参数的格式都是“参数名 = 参数值”的形

式。Multipart/Related类型使用的参数有:

boundary:块分界字符串,所有的Multipart/*类型都必须有这个参数,详见4.4.1

节。

type:参数值是MIME媒体类型,例如text/html,text/plain等。这个参数用来指出

根数据的类型。这个参数是必有的。虽然根数据块内也可以用头段Content-type指

出媒体类型,但是这个参数使得用户邮件软件一开始就可以知道根数据块的类型。

• start:参数值是标识根数据块的URI,其作用是指出当前邮件中哪一块是根数据块。

这个参数是可选的,如果没有这个参数,则默认邮件中第一块为根数据块。

• strat-info:为邮件应用程序提供进一步的信息,例如一些可执行的命令。这个参数

是可选的,其参数值由应用程序自行解释。

本章第六节提到头段Content-Disposition,这个头段可用来指出块内数据是inline还是

attachment。当邮件正文为Multipart/Related时,所有的块都应该是inline,因此头段

Content-Disposition在此处是没有意义的。但是仍然允许在块内使用这个头段,因为那些不

知道Multipart/Related类型的软件将会将邮件作为Multipart/mixed处理,这时

Content-Disposition可以告诉它们数据的处理方式。

支持Multipart/Related类型的软件则必须忽略块内的Content-Disposition头段。

7.2 Content-ID

为了让根数据引用附属数据,可以在附属数据块中用头段Content-ID指定一个URI,然

后在根数据中按照这个URI引用数据。

例如,如果我们在邮件中包含一个html文档,则其中可能包含了引用附属数据的URI,

例如

其中的/images/本身就是一个URI,但这种URI并不是指向聚合邮

件内的数据,而是指向网络上的某个位置(头段Content-Location可利用这种URI,稍后介

绍)。使用Content-ID的方法是改写根数据中的URI,使之指向邮件内的某一块。

这种URI有两种命名方案:cid和mid。cid用来标识邮件内的一个数据块,mid则用来

标识一封邮件及其中的某一块。

cid的语法是:

cid:

localpart

@

domain

简单地说,就是“cid:”后面再加上一个“邮箱地址”,不过其中的

localpart

并非用户名,

而是作为ID用的标识字符串,这串ID字符的唯一性由设计它的主机负责,

domain

是该主

机的域名。由于域名是唯一的,

localpart

在域名对应的主机上也是唯一的,所以这种URI

是全球唯一的。

当用cid标识数据块时,块内用头段Content-ID指出该块的cid,但要去掉开头的“cid:”

并且loacalpart@domian要用一对尖括号括起来,而根数据中对应的cid则使用原状。

例6:使用cid的聚合邮件。

From:************

To:************

MIME-Version: 1.0

Content-type: multipart/related; boundary="simple-example";

type=text/html

-- simple-example

Content-type: text/html; charset="GB2312"

Content-Transfer-Encoding: 8bit

此处为html内容,其中包括一幅图象,其中的URI已设为cid:

--simple-example

Content-ID:

Content-type: image/gif

Content-Transfer-Encoding: base64

--simple-example--

命名方案mid的URI语法为:

发布评论

评论列表 (0)

  1. 暂无评论