首页 | 邮件资讯 | 技术教程 | 解决方案 | 产品评测 | 邮件人才 | 邮件博客 | 邮件系统论坛 | 软件下载 | 邮件周刊 | 热点专题 | 工具
网络技术 | 操作系统 | 邮件系统 | 客户端 | 电子邮箱 | 反垃圾邮件 | 邮件安全 | 邮件营销 | 移动电邮 | 邮件软件下载 | 电子书下载

网络技术

邮件原理 | 硬件设备 | CISCO | 网络协议 | 网络管理 | 传输介质 | 线路接入 | 路由接口 | 邮件存储 | 华为3Com |
首页 > 网络技术 > 电子邮件原理及协议 > 新手入门:了解邮件服务与相关协议(1) > 正文

新手入门:了解邮件服务与相关协议(1)

出处:天极网 作者:天极网 时间:2005-11-9 0:21:00
 电子邮件是因特网上最为流行的应用之一。如同邮递员分发投递传统邮件一样,电子邮件也是异步的,也就是说人们是在方便的时候发送和阅读邮件的,无须预先与别人协同。与传统邮件不同的是,电子邮件既迅速,又易于分发,而且成本低廉。另外,现代的电子邮件消息可以包含超链接、HTML格式文本、图像、声音甚至视频数据。我们将在本文中查看处于因特网电子邮件核心地位的应用层协议。但在深入讨论这些协议之前,让我们先概览一下因特网邮件系统及其重要部件。

  下图展示了因特网邮件系统的高层概貌。我们看到,该系统由三类主要部件构成:用户代理、邮件服务器利简单邮件传送协议(simple Mail Transfer Protocol,简称SMTP)。我们将在这样的上下文中说明每类部件:发信人A1ice给收传人Bob发送一个电于邮件消息。用户代理允许用户阅读、回复、转寄、保存和编写邮件消息(电子邮件的用户代理有时称为邮件阅读器,不过我们在本文中避免使用这个说法)。Alice写完电子邮件消息后,她的用户代理把这个消息发送给邮件服务器,再由该邮件服务器把这个消息排入外出消息队列中。当Bob想阅读电子邮件消息时,他的用户代理将从他在其邮件服务器上的邮箱中取得邮件。20世纪90年代后期,图形用户界面(GUI)的电子邮件用户代理变得流行起来,它们允许用户阅读和编写多媒体消息。当前流行的用户代理包括Ootlook,foxmail等。公共域中还有许多基于文本的电于邮件用户代理,包括mail、pine和elm。


图1 因特网电子邮件系统概貌

  邮件服务器构成了电子邮件系统的核心。每个收信人都有一个位于某个邮件服务器上的邮箱(mailbox)。Bob的邮箱用于管理和维护已经发送给他的邮件消息。一个邮件消息的典型旅程是从发信人的用户代理开始,游经发信人的邮件服务器,中转到收信人的邮件服务器,然后投递到收信人的邮箱中。当Bob想查看自己的邮箱中的邮件消息时,存放该邮箱的邮件服务器将以他提供的用户名和口令认证他。Alice的邮件服务器还得处理Bob的邮件服务器出故障酌情况。如果Alice的邮件服务器无法把邮件消息立即递送到Bob的邮件服务器,A1ice的服务器就把它们存放在消息队列(message queue)中,以后再尝试递送。这种尝试通常每30分钟左右执行一次:要是过了若干天仍未尝试成功,该服务器就把这个消息从消息队列中去除掉,同时以另一个邮件消息通知发信人(即Alice)。

  简单邮件传送协议(SMTP)是因特网电子邮件系统首要的应用层协议。它使用由TCP提供的可靠的数据传输服务把邮件消息从发信人的邮件服务器传送到收信人的邮件服务器。跟大多数应用层协议一样,SMTP也存在两个端:在发信人的邮件服务器上执行的客户端和在收信人的邮件服务器上执行的服务器端。SMlP的客户端和服务器端同时运行在每个邮件服务器上。当一个邮件服务器在向其他邮件服务器发送邮件消息时,它是作为SMTP客户在运行。当一个邮件服务器从其他邮件服务器接收邮件消息时,它是作为SMTP服务器在运行。
SMTP

  SMTP在RFC 821中定义,它的作用是把邮件消息从发信人的邮件服务器传送到收信人的邮件服务器。SMIP的历史比HTTP早得多,其RFC是在1982年编写的,而SMTP的现实使用又在此前多年就有了。尽管SMTP有许多奇妙的品质(它在因特网上的无所不在就是见证),但却是一种拥有某些“古老”特征的传统战术。例如,它限制所有邮件消息的信体(而不仅仅是信头)必须是简单的7位ASCII字符格式。这个限制在20世纪80年代早期是有意义的,当时因特网传输能力不足,没有人在电子邮件巾附带大数据量酌图像、音频或视频文件。然而到了多媒体时代的今天,这个限制就多少显得局促了——它迫使二进制多媒体数据在文由SMTP传送之前首先编码成7位ASCII文本;SMTP传送完毕之后,再把相应的7位ASCII文本邮件消息解码成二进制数据。HTTP不需要对多媒体数据进行这样的编码解码操作。

  下面我们通过查看一个常见的情形来说明SMTP的基本操作。假设Alice给Bob发送一个简单的ASCII文本邮件消息:

  ●Alice调用自己的电子邮件用户代理,给出Bob的电子邮件地址(譬如说bob@someschool.edu),写好邮件内容,然后让用户代理发送本邮件消息。

  ●Alice的用户代理把该邮件消息发送到她的邮件服务器中,由邮件服务器把该消息排人某个消息队列中。

  ●运行在A1ice的邮什服务器上的SMTP客户端看到消息队列中的这个邮件消息后,打开一个到运行在Bob的邮件服务器主机上的SMTP服务器端的TCP连接。

  ●经过最初的一些SMTP握手之后,SMTP客户把A1ice的邮件消息发送到TCP连接上。

  ●在Bob的邮件服务器主机上,SMTP服务器收到这个邮件消息后,把这个消息投递到Bob的邮箱中。

  ●Bob在方便的时候调用自己的电子邮件用户代理阅读该邮件消息。

  图2展示了上述情形。


图2 alice的邮件服务器把邮件消息传送到Bob的邮件服务器

  需注意的是,SMTP通常不使用中间的邮件服务器主机中转邮件,即便源端和目的端邮件服务器主机位于地球上相反的位置也一样。假设Aiice的邮件服务器主机在香港,Bob的邮件服务器主机在阿拉巴马州,那么所建立的TCP连接将是这两台服务器主机之间的连接。具体地说,如果Bob的邮件服务器不工作了,那么A1ice发给Bob的邮件消息将存留在Alice的邮件服务器中等待新的尝试,而不会存放到某个中间的邮件服务器中。

  下面查看SWPT把邮件消息从发送端邮件服务器传送到接收端邮件服务器的具体过程。我们将看到,SMTP协议与人们用于面对面交互的礼仪之间有许多相似之处。首先,运行在发送端邮件服务器主机上的SMTP客户,发起建立一个到运行在接收端邮件服务器主机上的SMTP服务器端口号25之间的TCP连接。如果接收邮件服务器当前不在工作,SMTP客户就等待一段时间后再尝试建立该连接。这个连接建立之后,SMTP客户和服务器先执行一些应用层握手操作。就像人们在转手东西之前往往先自我介绍那样,SMTP客户和服务器也在传送信息之前先自我介绍一下。在这个SMTP握手阶段,SMTP客户向服务器分别指出发信人和收信人的电子邮件地址。彼此自我介绍完毕之后,客户发出邮件消息。SMTP可以指望由TCP提供的可靠数据传输服务把该消息无错地传送到服务器。如果客户还有其他邮件消息需发送到同一个服务器,它就在同一个TCP连接上重复上述过程;否则,它就指示TCP关闭该连接。

  让我们看一个客户(C)和服务器(S)交互的例子。客户所在主机名为crepes.fr,服务器所在主机名为hamburger.edu。前面标以“C:”的ASCII文本行是客户发送到它的TCP套接字中的完整文本行,前面标以“S:”的ASCII文本行是服务器发送到它的TCP套接字中的完整文本行。以下传输脚本在TCP连接建立之后马上发生:


  S:220 hamburger.edu
  C:HELO crepes.fr
  S:250 Hello crepes.fr,pleased to meet you
  C:MAIL FROM:
  S:250 alice@crepes.fr ... Serder OK
  C:RCPT TO:
  S:250 bob@hamburger.edu...Recipient OK
  C:DATA
  S:354 Enter mail,end with "." on a line by its self
  C:Do you like ketchup?
  C:How about pickles?
  C:.
  S;250 Message accepted for delivery
  C:QUIT
  S:221 hamburger.edu cloing connection

  在这个例子中,客户发送了一个从邮件服务器主机crepes.fr到hamburger.edu的邮件消息,信体内容为:“Do you like ketchup?How about pickles?”。客户总共发出了5个命令,分别为:HELO,MAIL FROM,RCPT TO,DATA和QUIT。这些命令的含义是不言自明的。服务器给每个命令发回应答,其中每个应答都由应答码和一些英语解释(可选)构成。这里需指出的是,SMTP使用持久连接,也就是说,如果发送邮件服务器有多个邮件消息需发送到同一个接收邮件服务器,那么所有这些消息可以在同一个TCP连接中发送。对于其中的每一个消息,客户以一个新的“HELO crepes.fr”命令开始整个消息发送过程,但是QUIT命令要等到所有消息都发送完之后才发出。

  我们可以尝试使用nc工具直接与SMTP服务器进行对话。首先指定使用SMTP端口号25连接到某台邮件服务器主机,这样就在本地主机和该邮件服务器主机之间建立了一个SMTP使用的TCP连接。登录完毕之后,应该立即收到来服务器的应答,接着就可以在合适的时刻依次发出现SMTP命令了。如果你连接到你朋友的5MTP服务器,就可以用这种方式向你的朋友发送邮件了(也就是说,不必使用邮件用户代理)。当然你也可以使用更常见的telnet工具,不过我发现用telnet建立起连接后常会遇到一些输入方面的问题。
与HTTP的比较

  我们简单地比较一下SMTP和HTTP。这两个协议都是用于从一台主机向另一台主机传送文件;HTTP用于从web服务器向Web用户代理(即浏览器)传送文件(或对象),SMTP用于从一个邮件服务器向另一个邮件服务器传送文件(也就是电子邮件消息)。在传送文件时,SMTP和持久HTTP都使用持久连接。可见,这两个协议具有一些共同的特征,不过它们之间的差别也是显著的。首先,HTTP基本上是一个内拉式协议(pull protocol)——有人把信息上传到web服务器中,用户则在方便的时候使用HTTP把这些信息从服务器上拉过来。更确切地说,TCP连接是由想要接收文件的主机发起的。SMIP则基本上是一个外推式协议(pushProtoco1)——发送端邮件服务器把文件推送给接收端邮件服务器。更确切地说,TCP连接是由想要发送文件的主机发起的。

  SMTP和HTTP的第二个重要差别是,SMTP要求包括信体部分在内的每个邮件消息都是7位ASCII文本格式。另外,SMTP RFC还要求每个邮件消息的信体以仅由单个点号构成的一行结束,改用ASCII字符名称来说就是每个邮件消息的信体必须以“CRLF.CRLF“结尾,其中CR和LF分别代表回车符和换行符。这种方式下,当从同一个SMTP客户接收一系列邮件消息时,SMTP服务器可以通过在字节流中搜索“CRLF.CRLF”来分割每个消息。要是信体不是ASCII文本,而是二进制数据(譬如说一幅JPEG图像),那么这些二进制数据字节流中偶尔出现“CRLF.CRLF”这一模式是有可能的。这将导致SMTP服务器不正确地认定当前邮件消息已结束。为避免这样的问题,二进制数据应以一定的方式先编码成ASCII文本,保证其中不使用特定的ASCH字符(包括点号)。HTTP无论是持久的还是非持久的都不需要预先把二进制数据转换成ASCII本。对于持久的HTTP,每个TCP连接只传送一个对象:服务器关闭连接后,客户就知道己接收到一个完整的响应消息。对于非持久的HTTP,每个响应消息中包含一个Content-length:头部,使得客户能够确定每个响应消息的边界。

  SMTP和HTTP的第三个重要差别涉及如何处理包含文本和图像或其他媒体类型的文档。HTTP是把每个对象封装在各自的HTTP响应消息中。SMTP(正如接下去要详细讨论的那样)是把同一个邮件内的各个对象置于同一个邮件消息中。

  邮件消息格式和MIME

  当Alice给Bob发一封普通的邮政信件时,她把这封信装入一个信封里,在信封上写明Bob的地址和自己的回信地址,然后投入邮箱;邮政业务在递送这封信的过程中,也会把表明时间和地点的邮戳盖在信封上。类似地,当电子邮件消息从一个人传送到另——个人时,在信体之前会有一个含有这些外围信息的信头。这些信息实际上由一系列在RFC 822中定义的邮件消息头部及其值构成。邮件消息中构成信头的各个头部和信体之间以一个空行(也就是CRLF)分割。RFC 822详细说明了各个邮件消息头部的格式和含义。与HTTP一样,邮件消息的每个头部都是直观可读的文本,由一个后跟冒号的关键字和相应的值构成。邮件消息的头部有些是必须的,有些则是司选的。每个信头必须有一个From:头部和一个To:头部.还可以有一个Subject:头部和其他头部。需注意的是,这些头部和先前讨论的SMTP命令不是一回事:SMTP命令是SMTP握手协议的一部分,邮件消息头部则属于邮件消息的一部分。

  下面是一个典型的电子邮件信头:

  From:alice@crepes.fr

  To:bob@hamburger.edu

  Subject:this is a test

  信头之后空一行就是信体。整个消息以只含有一个点号的单独行结束.
非ASCII数据的MlME扩展

  RFC 822中说明的邮件消息头部尽管足以满足发送普通ASCII文本邮件的要求,但是在多媒体消息(例如,包含图像、音频或视频数据的消息)的描述和非ASCII文本格式(例如,非英语国家使用的文字)的承载上,却显然不够。要发送非ASCII文本的邮件消息,必须由发送者的用户代理在其中增添额外的头部RFC 2045和RFC 2046定义了这些额外的头部,它们是对RFC 822的多用途因特网邮件扩展(Multipurpose Internet Mail Extensions,简称MIME)。

  支持多媒体的两个关键MIME头部是Content-Type:和Content-Tansfer-Encoding:。Content-Type:头部允许接收用户代理对邮件消息采取合适的行动。例如,通过指出信体内容为一个JPG图像,接收用户代理可以把信仲定向到某个JNG解压缩例程。我们已经知道,为确保SMTP正常工作,非ASCII文本消息必须预先编码成ASCH文本格式。

  Content-Tansfer-Encoding:头部用于告知接收用户代理信体已被编码咸ASCII格式,并指出具体编码方式。这样,当某个用户代理收到一个包含这两个头部的邮件消息时,它首先使用Content-Tansfer-Encoding:头部的值把信体转换成原始的非AscH文本形式,再使用Content-Type:头部的值确定自己应该对信体采取什么行动。

  下面看一个具体的例子。假设Alice想给Bob发送一个JPEG图像,她为此调用自己的用户代理,给出Bob的电子邮件地址和邮件消息的主题,并把这个JPG图像插入这个邮件消息的信体中(这个图像有可能是作为该邮件消息的“附件”插入的,具体取决于Alice所用的用户代理)。Alice填写完邮件消息后让用户代理把它发送出去。Alice的用户代理生成一个大体如下的MIME消息:

  From:alice@crepes.fr
  To:bob@hamburger.edu
  Subject:picture of mine
  MIME-Version:1.0
  Content-Transfer-Encoding:base64
  Content-Type:image/jpeg
  {...base64编码数据...)
  {...base64编码数据...)

  从中我们可以看到,alice的用户代理采用base64编码格式对这个JPEG图像进行编码i而base64是在MIME中标准化的用于转换成某种可接受的7位ASCII格式的编码技术之一[RFC 2045]。另一种流行的内容传送编码技术称为带转义的可打印(叫quoted-printable)编码格式,一般用于把普通的ASCII邮件消息转换成不带非期望字符串(例如由单个点号构成的行)的ASCII文本。

  Bob阅读邮件时,其用户代理所操作的是同一个MIME消息。该用户代理看到值为base64的Content-Transfer-Encoding:头部后,知道该邮件消息中还有一个值为image/jpeg的Content-Type:头部,它告知Bob的用户代理应该对信体进行JPEG解压缩。该邮件消息中的MIME-Version:头部自然是在指示本消息所用的MIME版本。需注意的是,邮件消息的其余部分仍然遵循标准的RFC 922/SMTP格式。具体地说,在信头之后有一个空行,接着是信体:在信体结束处是一个仅由单个点号构成的行。

  我们接下去深入讨论一下Content-Type;头部。该头部按照MIME规范[RFC 2046]有如下的格式;

  Content-Type: type/subtype; parameters

  其中parameters(以及其前面的分号)是可选的。通过在Content-Type:头部给出媒体类型名和子类型名,MIME消息信体中数据的性质得以说明。类型名和子类型名之后的其余部分是一组参数。总的说来,顶级类型名用于声明数据的一般类型,子类型名用于指明这类数据中的某种具体格式。参数是对于类型的修饰说明,具体取决于类型和子类型本身,基本上不影响内容性质的指定。MIME是按照可扩展这一目标仔细地设计的,并预期媒体类型/子类型以及它们的相关参数会随时间显著增长。为确保以有秩序的文档完备公开的方式开发这些类型/子类型,MIME建立了一套注册程式,把因特网已分配数值权威(Internet Asigned Numbers Authority,简称IANA)作为MIME各个可扩展域的中心注册处。BFC 2048具体说明了这些可扩展域的注册程式。

  当前已定义的MIME顶级类型共有7个,每个类型关联一组子类型,其数量在逐年增长。下面是其中的5个类型;

  ●text;text类型用于向接收者的用户代理指出消息体为文本。该类型极为普遍的一个类型/子类型对为text/plain。子类型plain指定不含任何格式定义信息的普通文本。  plain文本应该不加任何解释地按照原样显示,不需要特殊的软件,能支持给定的字符集就行。在实际的邮件消息中经常能看到值为比text/plain;charset=gb2312或  text/plain;charset="ISO—8859—1"的Content-Type:头部,其中的参数指出用于产生相应消息的字符集。另一个变得越来越普遍的类型/子类型对是text/html。子类型html指示接收用户代理解释嵌埋在消息体中的html标记,从而像Web页面那样显示信件内容,其中有可能包含各种字体的文本、超链接、Java小应用程序,等等。

  ●image:image类型用于向接收用户代理指出消息体为图像。该类型较为流行的两个类型/子类型对为iamge/gif和image/jpeg,接收用户代理碰到这样的类型时,就知  道该把消息体作为GIF图像或JPEG图像解码并显示。

  ●audio:audio类型需要音频输出设备(例如扬声器或电话)来表达内容。这类型中常见的已标准化子类型包括basic(基本8位u-law编码)和32kadpcm(RFC 1911中定义的  一种32Kbps格式)。

  ●video:video类型的子类型包括mpeg和quicktime。

  ●application:application类型适用于不适合归为其他类别的数据,通常用在必须由某个应用程序预先处理才能为用户所见或所用的数据上。例如.当用户在某个电子邮件消息中附带一个微软word文档时,其用户代理一般把它的类型子类型对指定为application/msword;这将导致接收用户代理启动微软word应用程序,并把该MIME消息的信体传递给它处理。这类型极为重要的一个子类型是octet-stream,它用于指示信体含有任意的二进制数据。收到内容类型为application/octet-stream的邮件消息后,接收用户代理会提示用户是否把信体保存到硬盘中,以便稍后处理。

相关文章 热门文章
  • 新手入门必看:Vista中建立VPN连接
  • 新手入门:企业邮箱及邮件服务器架设
  • LINUX新手入门及安装配置faq200
  • 手把手教你玩转NAS之新手入门(图)
  • 新手入门 漫谈服务器热插拔技术
  • 新手入门:了解邮件服务与相关协议 (2)
  • 新手入门:了解DNS服务基本原理
  • 新手入门:了解FTP服务与FTP协议
  • 新手入门:了解WWW服务与HTTP协议
  • 新手入门:了解网络应用与网络协议
  • 新手入门之认识典型邮件服务器(图)
  • 中文RFC文档目录
  • 手把手教你玩转免费顶级域名
  • 浅谈Base64编码
  • 手把手教你如何免费注册国际顶级域名
  • 电子邮件原理
  • 邮件-域名-DNS相关知识
  • 全面剖析E-mail收发失败的原因(一)
  • SMTP结构及原理
  • 关于邮件系统域名(DNS)设置的小常识
  • 电子邮件的工作原理
  • 邮件原文详细介绍(一)--神奇的MIME
  • 发送邮件常见出错代码
  • 自由广告区
     
    最新软件下载
  • SharePoint Server 2010 部署文档
  • Exchange 2010 RTM升级至SP1 教程
  • Exchange 2010 OWA下RBAC实现的组功能...
  • Lync Server 2010 Standard Edition 标..
  • Lync Server 2010 Enterprise Edition...
  • Forefront Endpoint Protection 2010 ...
  • Lync Server 2010 Edge 服务器部署文档
  • 《Exchange 2003专家指南》
  • Mastering Hyper-V Deployment
  • Windows Server 2008 R2 Hyper-V
  • Microsoft Lync Server 2010 Unleashed
  • Windows Server 2008 R2 Unleashed
  • 今日邮件技术文章
  • 腾讯,在创新中演绎互联网“进化论”
  • 华科人 张小龙 (中国第二代程序员 QQ...
  • 微软推出新功能 提高Hotmail密码安全性
  • 快压技巧分享:秒传邮件超大附件
  • 不容忽视的邮件营销数据分析过程中的算..
  • 国内手机邮箱的现状与未来发展——访尚..
  • 易观数据:2011Q2中国手机邮箱市场收入..
  • 穿越时空的爱恋 QQ邮箱音视频及贺卡邮件
  • Hotmail新功能:“我的朋友可能被黑了”
  • 入侵邻居网络发骚扰邮件 美国男子被重..
  • 网易邮箱莫子睿:《非你莫属》招聘多过..
  • 中国电信推广189邮箱绿色账单
  • 最新专题
  • 鸟哥的Linux私房菜之Mail服务器
  • Exchange Server 2010技术专题
  • Windows 7 技术专题
  • Sendmail 邮件系统配置
  • 组建Exchange 2003邮件系统
  • Windows Server 2008 专题
  • ORF 反垃圾邮件系统
  • Exchange Server 2007 专题
  • ISA Server 2006 教程专题
  • Windows Vista 技术专题
  • “黑莓”(BlackBerry)专题
  • Apache James 专题
  • 分类导航
    邮件新闻资讯:
    IT业界 | 邮件服务器 | 邮件趣闻 | 移动电邮
    电子邮箱 | 反垃圾邮件|邮件客户端|网络安全
    行业数据 | 邮件人物 | 网站公告 | 行业法规
    网络技术:
    邮件原理 | 网络协议 | 网络管理 | 传输介质
    线路接入 | 路由接口 | 邮件存储 | 华为3Com
    CISCO技术 | 网络与服务器硬件
    操作系统:
    Windows 9X | Linux&Uinx | Windows NT
    Windows Vista | FreeBSD | 其它操作系统
    邮件服务器:
    程序与开发 | Exchange | Qmail | Postfix
    Sendmail | MDaemon | Domino | Foxmail
    KerioMail | JavaMail | Winwebmail |James
    Merak&VisNetic | CMailServer | WinMail
    金笛邮件系统 | 其它 |
    反垃圾邮件:
    综述| 客户端反垃圾邮件|服务器端反垃圾邮件
    邮件客户端软件:
    Outlook | Foxmail | DreamMail| KooMail
    The bat | 雷鸟 | Eudora |Becky! |Pegasus
    IncrediMail |其它
    电子邮箱: 个人邮箱 | 企业邮箱 |Gmail
    移动电子邮件:服务器 | 客户端 | 技术前沿
    邮件网络安全:
    软件漏洞 | 安全知识 | 病毒公告 |防火墙
    攻防技术 | 病毒查杀| ISA | 数字签名
    邮件营销:
    Email营销 | 网络营销 | 营销技巧 |营销案例
    邮件人才:招聘 | 职场 | 培训 | 指南 | 职场
    解决方案:
    邮件系统|反垃圾邮件 |安全 |移动电邮 |招标
    产品评测:
    邮件系统 |反垃圾邮件 |邮箱 |安全 |客户端
    广告联系 | 合作联系 | 关于我们 | 联系我们 | 繁體中文
    版权所有:邮件技术资讯网©2003-2010 www.5dmail.net, All Rights Reserved
    www.5Dmail.net Web Team   粤ICP备05009143号