邮件服务器-邮件系统-邮件技术论坛(BBS)

标题: Exchange传输组件大揭秘(上) [打印本页]

作者: ntoskrnl    时间: 2006-2-13 15:55
标题: Exchange传输组件大揭秘(上)
这是笔者关于Exchange传输技术系列文章的第一篇(共三篇)<br>
文章发表在WinITPro杂志06年2月刊,转载请注明出处,并不允许修改和删节。<br>
<br>
Exchange传输组件大揭秘(上)<br>
作者/喻勇<br>
<br>
<b>导读:</b><br>
<br>
本文根据笔者在微软Technet Webcast上的讲稿整理而成。文章介绍了微软Exchange Server中的核心传输组件以及它们的工作原理,阐述了SMTP协议的内容和使用SMTP发送邮件时的详细过程;深入地讨论了邮件传输和路由的工作机制,分析了SMTP报文的组成和Exchange在传输邮件时的路由过程(包括AQ, Routing Engine等组件)。本文可以供Exchange管理员深入的了解邮件传输组件的内部工作方式。<br>
<br>
<b>STMP协议规范和命令字</b><br>
<br>
SMTP协议是随着Internet的发展逐渐规范化和进一步完善的。SMTP协议最早在RFC821中被定义,它提供了Internet上两个节点之间传送信息的一种方式。SMTP协议非常的简单和直观,在RFC821中,STMP由一些通过ASCII码表示的命令字组成,通过这些命令字,两个节点之间(客户机和服务器)可以建立SMTP连接,并进行信息传递。SMTP的标准命令字和其作用如表一:<br>
<br>
<IMG onmouseover="javascript:if(this.width>520)this.width=520;" style="CURSOR: hand" onclick=javascript:window.open(this.src); src="http://www.5dmail.net/pic/exchange_1.gif" onload="javascript:if(this.width>520)this.width=520;" align=absmiddle border=0><br>
<br>
SMTP服务器监听TCP 25号端口,并对客户端发送的合法命令做出响应。我们可以通过Telnet的方式演示一下最简单的SMTP邮件传送过程。表二中列出了使用Windows Telnet客户端跟Exchange SMTP Server通信的过程:(粗体表示用户输入,斜体表示服务器回应)<br>
<br>
<IMG onmouseover="javascript:if(this.width>520)this.width=520;" style="CURSOR: hand" onclick=javascript:window.open(this.src); src="http://www.5dmail.net/pic/exchange_2.gif" onload="javascript:if(this.width>520)this.width=520;" align=absmiddle border=0><br>
<br>
表二:使用Telnet进行SMTP会话<br>
<br>
通过Telnet进行SMTP会话在诊断一些邮件传输问题时非常有用,微软在其知识库文档中详细描述了使用Telnet进行SMTP会话的过程。(XFOR:Telnet 到端口 25 以测试 SMTP 通信,<A HREF="http://support.microsoft.com/default.aspx?scid=kb;zh-cn;153119" TARGET=_blank>http://support.microsoft.com/default.aspx?scid=kb;zh-cn;153119</A>)<br>
<br>
在Exchange Server中,SMTP是邮件系统传输模块的核心,SMTP负责了组织内部邮件服务器间邮件的传送和对外发送邮件的重任。图一表示了SMTP模块在Exchange整个系统结构中的位置。SMTP协议栈运行在IIS的进程中,在IIS中,还有AQE和Routing模块协助SMTP的工作。Exchange的数据库模块(Information Store)通过EXIPC作为桥梁,跟SMTP进行通信。<br>
<br>
<IMG onmouseover="javascript:if(this.width>520)this.width=520;" style="CURSOR: hand" onclick=javascript:window.open(this.src); src="http://www.5dmail.net/pic/exchange_4.gif" onload="javascript:if(this.width>520)this.width=520;" align=absmiddle border=0><br><br>
图一:SMTP模块在Exchange中的位置<br>
<br>
用户可以通过多种方式向Exchange服务器提交需要发送的邮件,例如,用户可以使用Outlook的MAPI方式,把邮件提交到Information Store中,也可以使用Outlook Express的SMTP方式,向SMTP服务器直接传送需要发送的邮件。Exchange上的SMTP模块,在不同的情况下承担的角色是不一样的,我们可以通过如下的情景分析,来透彻的了解SMTP服务器的工作方式。<br>
<br>
<IMG onmouseover="javascript:if(this.width>520)this.width=520;" style="CURSOR: hand" onclick=javascript:window.open(this.src); src="http://www.5dmail.net/pic/exchange_5.gif" onload="javascript:if(this.width>520)this.width=520;" align=absmiddle border=0><br><br>
图二:SMTP服务器在不同情况下担任的角色<br>
<br>
如图二,我们分6种情况来讨论SMTP服务器的不同角色。<br>
<br>
连接1,2,3,4代表了Inbound连接(其中连接1中的MAPI客户端是把邮件直接提交到Information Store中,不属于SMTP连接),当处理inbound连接时,图中的邮件服务器起到的是SMTP Server的角色。请注意,Inbound连接有两种类型,一种是客户端提交的邮件(连接2),这种通常表示组织内的用户通过在Outlook Express软件中指定SMTP服务器IP地址,来向服务器提交需要发送的邮件;另一种类型是其他的SMTP服务器转发过来的邮件(连接3,4),这通常表示当前邮件服务器是网关,或者是信件中收件人的邮箱所在的服务器。<br>
<br>
连接5,6代表了Outbound连接,当处理outbound连接时,邮件服务器起到的是SMTP Client的角色,不管是发到外部,还是内部邮件的转发,都是由SMTP Client发起会话,并且由远端的服务器来响应。<br>
<br>
由此我们可以发现,一台SMTP主机,它在运行过程中,既会承担SMTP Server的角色来接收Inbound连接所提交的SMTP报文,同时也会作为SMTP Client来向远程的服务器发送SMTP请求(Outbound)。只有分清楚了这些不同角色的含义,才可能透彻的了解Exchange的邮件传输过程。<br>
<br>
如果把一封邮件的发送过程比喻为一次长途旅程,那么SMTP在其中只是扮演了交通工具的作用。大家可能已经注意到,对于一个给定的收件人地址(例如,abc@microsoft.com),SMTP并没有定义到底与目标域中哪一个主机来建立连接来完成邮件的传输过程,也就是说,RFC 821中的SMTP并没有定义“寻址”的方法(下面提到的MX记录及邮件选路和域名系统的规范,在RFC 974中被详细定义)。<br>
<br>
在Internet中,我们是通过DNS里面的MX记录来实现邮件的寻址的。当一个组织或者公司购买了一个Internet域名并且建立了邮件服务器以后,往往会把某一台或者几台服务器发布到外网,作为邮件网关,接收来自Internet的邮件。同时,需要在该域名DNS系统(这里指此域名在Internet上的DNS,而不是内网活动目录的DNS,千万不能混淆)的MX记录字段中,注册这些主机的名字,这样当给这个域中的邮箱发邮件时,发送方通过向Internet上DNS服务器查询该域名的MX记录,再确定有哪些服务器可以建立SMTP连接。我们可以使用NSLOOK这个命令,在查询特定域名下面注册的MX记录。如表三,我们查到了微软公司现有的MX记录。在输出的结果中,我们发现微软公司注册了三个主机名来作为接收外部邮件的服务器,并且当进一步解析DNS主机记录时,我们可以发现这三个主机名分别对应6个IP地址,通过这种做法,可以实现SMTP流量的负载均衡。(仔细看会发现这些IP地址属于两个不同的网段,应该是由不同的ISP提供的网络链路,这也在某种程度上实现了线路的互相备份和冗余。)<br>
<br>
当我们架设邮件服务器系统时,只有正确的在ISP的DNS上设置了MX记录,才能够收到从外部发来的邮件。关于MX记录的更多信息,可以参考微软的知识库文档。(XFOR: DNS MX Records and CNAME <A HREF="http://support.microsoft.com/default.aspx?scid=kb;en-us;153001" TARGET=_blank>http://support.microsoft.com/default.aspx?scid=kb;en-us;153001</A>)<br>
<br>
<table width=100% bgcolor=#cccccc cellpadding=5 cellspacing=1 class=TBone><tr><td bgcolor=#f7f7f7 class=TBBG9>H:\>nslookup<br>
>set q=mx<br>
>microsoft.com<br>
DNS Server: ns-pxb.online.sh.cn<br>
Address: 202.96.209.6<br>
-----------Query Result-----------<br>
microsoft.com MX preference = 10, mail exchanger = maila.microsoft.com<br>
microsoft.com MX preference = 10, mail exchanger = mailb.microsoft.com<br>
microsoft.com MX preference = 10, mail exchanger = mailc.microsoft.com<br>
maila.microsoft.com internet address = 131.107.3.125<br>
maila.microsoft.com internet address = 131.107.3.124<br>
mailb.microsoft.com internet address = 207.46.121.51<br>
mailb.microsoft.com internet address = 131.107.3.123<br>
mailc.microsoft.com internet address = 207.46.121.53<br>
mailc.microsoft.com internet address = 207.46.121.52<br>
-----------Query Result-----------</td></tr></table><br>
<br>
表三:微软公司的MX记录设置<br>
<br>
SMTP标准命令字最初定义在RFC821标准中,随着Internet的发展,这些命令逐渐无法满足一些特殊的邮件发送要求,比如,发送方身份的认证,数据加密,报文的传输优化等等。在RFC 1869中,国际标准化组织定义了扩展SMTP协议(Extended SMTP,简称ESMTP),在原有的命令字基础之上,增加了如下表(表四)所示的的扩展命令:<br>
<br>
<IMG onmouseover="javascript:if(this.width>520)this.width=520;" style="CURSOR: hand" onclick=javascript:window.open(this.src); src="http://www.5dmail.net/pic/exchange_7.gif" onload="javascript:if(this.width>520)this.width=520;" align=absmiddle border=0><br>
<br>
表四:ESMTP的扩展命令集<br>
<br>
标准SMTP(RFC 821)和扩展SMTP(RFC 1869)都得到了当今主流邮件服务器的广泛支持,Exchange服务器完全兼容这两种类型的SMTP协议,并且还增加了一些用于Exchange服务器间通信的特殊SMTP命令字(非国际标准)。在一些特殊情况下(比如跟比较旧版本的邮件服务器进行SMTP通信),我们也可以关闭Exchange Server上的ESMTP,使其只提供最简单和标准的RFC 821 SMTP协议,具体请参考:How to turn off ESMTP verbs in Exchange Server,<A HREF="http://support.microsoft.com/default.aspx?scid=kb;en-us;257569" TARGET=_blank>http://support.microsoft.com/default.aspx?scid=kb;en-us;257569</A>。<br>
<br>
<b>SMTP报文格式</b><br>
<br>
现在我们来分析SMTP的报文格式。如图三,一个合法的SMTP报文由信封和正文这两部分所组成。在传递过程中,邮件每经过一台SMTP服务器,该服务器就会在信封这一部分上留下转发的痕迹(转发时间,服务器IP地址等等)。正文(既SMTP DATA命令后所做的输入)部分由信头和信体组成,信头中包含发件人和收件人地址以及其他的一些信息,信体为邮件的具体内容。<br>
<br>
信封上有发件人和收件人地址,不同的是,信封上的发件人收件人地址由MAIL FROM和RCPT TO命令写入,是用来给邮件服务器进行信件传送的,而信头上的发件人收件人是用来显示在Outlook中的。这两组地址,是可以不相同的!我们跟传统的书信比较一下:当给女朋友写情书的时候,大家一般都在信封上写她的真实姓名,而在信纸的开头冠以“亲爱的。。。”之类的亲切称呼。情书在被邮局投递时,工作人员会在信封上敲邮戳,以反映投递的过程。<br>
<br>
信封和信体上的地址可以不相同,这有什么好处呢?我们举一个简单的例子。当我们采用BCC的方式发一封邮件给A,B,C三个人时,BCC的特点就要求隐藏邮件的收件人。这时,Exchange就会把原来的邮件拆分成三封独立的邮件,然后分别生成SMTP报文,在发给每个人的信封中,写入他的地址,在正文的信头中,把收件人表示为空。这样,每个收件人都回收到BCC的邮件,但是都无法知道这封信还BCC了哪些其他人。<br>
<br>
<IMG onmouseover="javascript:if(this.width>520)this.width=520;" style="CURSOR: hand" onclick=javascript:window.open(this.src); src="http://www.5dmail.net/pic/exchange_8.gif" onload="javascript:if(this.width>520)this.width=520;" align=absmiddle border=0><br><br>
图三:SMTP的报文格式<br>
<br>
我们可能已经注意到,在RFC 821和1869中,我们定义了SMTP中用于建立连接和传输报文的命令字。在DATA命令后,我们可以传送由ASCII字符组成的数据流(即前面所提到的正文部分)到远端的SMTP主机,可这远远不能满足日常email通信的要求。邮件发送者往往需要在信件中使用非ASCII字符(例如,中文和其他非罗马字母语言),还需要插入各种类型的附件。为了能通过email发送非ASCII数据,IETF定义了多用途Internet邮件扩充MIME(Multipurpose Internet Mail Extension)标准。MIME并非为了改动SMTP或者取代它,而是允许使用ASCII码对任意数据进行编码,然后使用SMTP的DATA命令进行传送。<br>
<br>
我们可以通过如下的例子来深入了解MIME编码在邮件中的作用。如图四,如果邮件中包含由MIME编码的数据,一般会在信头中指定MIME版本和分隔符(例子中的boundary=98766789,通过此分隔符来分隔不同的MIME内容)。当信件正文中有图文混排,或者中英文交叉在一起的情况,就需要把不同的内容分别进行MIME编码。下图中所表示的邮件由一段文本和一张jpeg图片组成,所以就会生成两段独立的MIME编码。每段MIME编码起始位置,都会指明这段编码所代表的数据类型和使用的编码算法,以方便客户端软件进行解码。我们可以在Outlook软件中把邮件另存为以EML为扩展名的文件,然后用写字板打开,这样可以看到所有的邮件结构和MIME编码。<br>
<br>
<IMG onmouseover="javascript:if(this.width>520)this.width=520;" style="CURSOR: hand" onclick=javascript:window.open(this.src); src="http://www.5dmail.net/pic/exchange_9.gif" onload="javascript:if(this.width>520)this.width=520;" align=absmiddle border=0><br><br>
图四:MIME编码在邮件中的作用<br>
<br>
至此我们简单的介绍了SMTP协议的传输命令和其编码方式,正如我们在开篇所提到的,SMTP协议是随着Internet的发展和用户的需求逐渐完善和优化的,其标准的形成经历了一定的过程,下面简单的列出了跟SMTP有关的几个RFC标准。<br>
<br>
<IMG onmouseover="javascript:if(this.width>520)this.width=520;" style="CURSOR: hand" onclick=javascript:window.open(this.src); src="http://www.5dmail.net/pic/exchange_10.gif" onload="javascript:if(this.width>520)this.width=520;" align=absmiddle border=0><br>
<br>
<b>Exchange传输引擎架构</b><br>
<br>
在花了大量篇幅讨论过SMTP协议的细节之后,我们来看一看微软是如何设计Exchange的传输模块,使其既满足SMTP协议的规则,又能够在微软的特定系统架构环境下高效地工作。Exchange Server是一个非常复杂的大型软件,它涉及到了活动目录、高性能数据库、各种类型的网络协议(MAPI、RPC、HTTP、SMTP、NNTP等等)以及很多Windows底层的技术,做为传输模块核心的SMTP服务,需要在实现自身功能的基础上,跟上述模块紧密、高效、安全的运行在一起,这是微软的Exchange开发者所面临的巨大挑战。<br>
<br>
在微软发布Exchange 2000之前,SMTP协议的实现作为IIS 5.0的一部分,已经随着Windows 2000一起发布了。Windows中的SMTP服务是严格按照RFC标准所开发的,实现了其中的绝大部分要求。但是对于Exchange Server来说,这个版本的SMTP还需要进一步的增强,以实现跟微软Exchange相关的邮件数据库和活动目录的接口。Exchange Server的SMTP是在Windows SMTP的基础之上进行了一定的扩展和增强。从图一中我们可以看出来,SMTP是运行在IIS的进程空间(inetinfo.exe)的,在安装Exchange Server时,安装程序接管Windows SMTP,并对其进行改造。首先,安装程序把SMTP的工作目录转移到“\Exchsrvr\mailroot\vsi 1”下面,并且重新设置这些目录的若干属性;然后,安装程序注册了一些COM组件(DLL文件),这些组件作为Exchange SMTP的扩展,将扩展和覆盖Windows SMTP原有的模块,并和IIS无缝的集成在一起进行邮件的传输工作。概括来说,Exchange对Windows SMTP一共做了如下五个方面的扩展:<br>
<br>
1.高级队列引擎(Advanced Queuing Engine,下文简称AQE)。作为传输模块的心脏,高级队列引擎控制着SMTP服务器上邮件的处理流程,所有提交到SMTP服务器的邮件,都无一例外的要经过AQE的处理.<br>
<br>
2.增强型邮件分类器(Enhanced Categorizer)。邮件分类器负责邮件的收件人地址解析。在Windows SMTP中,Windows在其自带的CAT.DLL中实现了邮件分类器的基本功能,但是这个功能在Windows下默认是关闭的。Exchange安装时,安装程序激活了邮件分类器,并且使用其自带的PHATCAT.DLL来接管CAT.DLL实现Exchange SMTP邮件分类器的功能。PHATCAT.DLL由Exchange开发小组编写,有更加复杂的功能,并且与活动目有很好的集成。<br>
<br>
3.链路状态协议(Link State Protocol)。链路状态协议用于Exchange组织中的路由信息更新。Exchange服务器、路由组和路由组连接器的任何状态变化,都由链路状态协议负责在整个组织环境中进行广而告之。这些功能也是由Exchange SMTP来协助实现的,服务器使用特定的X-LINK2STATE命令字来传送路由表的变化。<br>
<br>
4.数据库驱动程序接口(Information Store Driver)。数据库驱动程序接口允许SMTP中的组件对Exchange数据库中的邮件进行直接的读取,这在进行邮件的本地投递和获取邮件属性时非常有用。<br>
<br>
5.Exchange SMTP专用命令字(Extended Command Verbs)。为了满足自身的要求,微软在SMTP命令字的基础上,增加了X-LINK2STATE、Chunking和Pipelining等等特殊的关键字,以实现服务器间通信和特定的性能优化。<br>
<br>
Exchange的SMTP之所以建立在Windows SMTP的基础之上,除了为了接管Windows SMTP原有的功能之外,另一个重要的原因是为了获得IIS所提供的安全、高效的网络通信平台。在IIS中,用户身份认证,底层网络通信这些模块已经完成并且技术成熟度也很高,因此不需要Exchange的开发者再重新花力气去另起炉灶。图五显示了SMTP在IIS和整个Windows平台中的位置。SMTP可以同时响应很多并发的连接,其中一个很重要的原因就是SMTP借助了IIS所提供的异步线程队列技术(Asynchronous Thread Queue),该技术允许并发连接可以被系统以平行、异步的方式高速的处理,在Windows平台上尽最大的可能性提高了系统的吞吐量。<br>
<br>
<IMG onmouseover="javascript:if(this.width>520)this.width=520;" style="CURSOR: hand" onclick=javascript:window.open(this.src); src="http://www.5dmail.net/pic/exchange_11.gif" onload="javascript:if(this.width>520)this.width=520;" align=absmiddle border=0><br><br>
图五:SMTP在IIS和整个Windows平台中的位置<br>
<br>
前文所提到的Exchange SMTP扩展模块,是采用COM组件和Event Sink技术来完成的。当IIS中的线程运行SMTPSVC.DLL中的SMTP协议处理代码,或者运行PHATQ.DLL中的SMTP传输过程处理代码时,被传送的邮件会经历一个又一个的“事件”。SMTP使用微软服务器扩展对象(Server Extension Object,SEO.DLL)这个COM组件来触发这一系列的事件,并且随后使用COM激活技术去实例化跟这些事件所关联的相应代码(调用Event Sink)。SMTP常常用事件来表示一个SMTP命令的提交(如客户端发送一个EHLO命令给服务器),也用事件表示把一封邮件提交给传输子系统。一些诸如SMTP协议扩展、邮件分类器、路由引擎的模块,这些都是微软所开发的Event Sink,他们分别注册并跟SMTP中相应的事件相关联。Event和Event Sink是互相关联的,Event被触发后,事先注册好的Event Sink中的代码就会被调用。Event触发与调用Event Sink和编程技术中的回调函数是同样的道理。值得一提的是,Exchange的Event Sink接口技术是公开的,也就是说任何开发者都可以编写自己的事件响应代码,来扩展SMTP的功能。(常见的在邮件结尾自动添加公司保密声明、邮件自动归档、邮件查毒过滤、垃圾邮件判别等等功能,都是通过二次开发的Event Sink来实现的)。在进一步讨论之前,我们来看一看SMTP中事件的种类和他们相应的作用。如下图,SMTP触发的事件一般分为4个大类别。<br>
<br>
<IMG onmouseover="javascript:if(this.width>520)this.width=520;" style="CURSOR: hand" onclick=javascript:window.open(this.src); src="http://www.5dmail.net/pic/exchange_12.gif" onload="javascript:if(this.width>520)this.width=520;" align=absmiddle border=0><br><br>
图六:SMTP触发的事件类别<br>
<br>
1.SMTP协议事件(SMTP protocol events)。<br>
这些事件针对SMTP协议本身,其注册的事件响应代码(Event Sink)通过修改、禁用或增加一些特殊的命令字,来改变SMTP协议引擎对标准SMTP命令字的响应行为。举例来说,进行X-LSA链路状态协议(此协议用于更新服务器路由拓扑)处理的Event Sink会针对其自定义的X-LINK2STATE这一SMTP命令字做出响应,执行相应的路由更新操作。SMTP协议事件的Event Sink也能够更改标准SMTP和ESMTP命令字的回应和处理过成功,例如,当用户提交MAIL FROM命令时,预先定义的Event Sink可以检查FROM字段中的邮件地址是否在黑名单中,如果是,可以采取屏蔽操作。<br><br>
2.SMTP存储事件(SMTP store events)。<br>
这些存储事件允许其Event Sink(通常在数据库驱动中被实现)去获取在数据库或者文件系统中的邮件内容。传输子系统使用此Event Sink来完成邮件的本地投递工作。(邮件最终目的地就是当前SMTP服务器时,SMTP执行本地投递,把信件保存到数据库中)<br>
<br>
3.SMTP传输事件(SMTP transport events)。<br>
当邮件到达服务器、在传输系统中被处理、投递给收件人或向外转发时,都会触发一连串的SMTP传输事件。在Exchange 2003中,微软使用SMTP传输事件来调用邮件的分类器和路由组件(这两部分会在下一期的文章中进行非常细致的讨论)。<br>
<br>
4.SMTP系统事件(SMTP system events)。<br>
与此事件相关联的Event Sink负责进行日志记录等工作,该Event Sink往往以异步的方式被触发,执行Event Log和SMTP诊断日志的记录工作。<br>
<br>
我们再从全局的角度看一下Exchange的传输模块。如图七,Exchange邮件传输流程大致可以从这张图上反映出来。<br>
<br>
<br>
<IMG onmouseover="javascript:if(this.width>520)this.width=520;" style="CURSOR: hand" onclick=javascript:window.open(this.src); src="http://www.5dmail.net/pic/exchange_13.gif" onload="javascript:if(this.width>520)this.width=520;" align=absmiddle border=0><br><br>
图七:Exchange邮件传输流程<br>
<br>
邮件可以从两个来源进入传输模块,通过SMTP协议引擎(前文图二中的2、3、4,当使用Outlook Express的SMTP/POP3方式收发邮件时,属于这种情况)或者通过数据库(Web Storage System)直接向传输模块提交(前文图二中的1,当使用Outlook MAPI方式,或者OWA发信时,属于这种情况)。需要注意的是,当信件由数据库引擎提交时,它是不经过SMTP协议模块处理的,而是直接放入到分类器的队列里面了。因此,一般的反垃圾邮件和反病毒程序,都不会去通过注册Event Sink来监听SMTP协议事件来工作,因为这样会漏掉通过数据库直接提交的邮件,这种类型的程序,往往注册监听AQ中分类器所产生的事件。请牢记,只有高级队列中的分类器是Exchange系统中传送邮件时唯一的一个必经之路,其它模块都有可能在特定的情况下被跳过。<br>
<br>
邮件经过分类器和路由引擎进行处理,来分析收件人地址并进行下一跳(next hop)的投递路由判断和选择,然后就会交给SMTP向外投递。当下一跳的目的地恰好是本地服务器时,SMTP调用Store Driver中定义的Local Delivery把邮件投递到数据库中,当下一跳目的地是其他远程服务器时,根据目的地服务器的类型,邮件依次被放置到不同的远程队列中进行投递处理,此时,SMTP承担图二中5、6的角色,以SMTP Client的身份,向远程SMTP主机发起会话请求。邮件就是这样在一台台的服务器间被传递,直到被Local Delivery到目标数据库中(或者被退信)。<br>
<br>
<b>总结和下期介绍:</b><br>
本文介绍了SMTP协议的工作方式,基本命令字和MIME的基础知识,同时也阐明了Exchange Server SMTP模块的组成方式。作为连载,笔者会在下一篇文章中从邮件投递过程的动态角度,深入地讨论Exchange是如何在内部处理邮件传输的。下期要目如下:<br>
<br>
1.基于事件触发机制的邮件传输过程<br>
2.Exchange Categorizer<br>
3.队列和MailMsg对象<br>
<br>
<b>参考文档:</b><br>
1.本文部分插图取自微软Technet网站。<br>
2.用TCP/IP进行网际互联第一卷:原理、协议与结构,Douglas Comer著。<br>
3.Microsoft Support Knowledge Base,微软知识库文档。<br>
<br>
<b>作者简介:</b><br>
喻勇,曾任微软产品技术支持工程师和CTEC课程讲师。对Exchange Server,SharePoint Server,IIS,.NET开发等微软产品和技术有丰富的实践经验。他的电子邮件信箱是yy@yuyong.net,读者可以在他的网站www.yuyong.net下载Exchange相关的课程讲义。
作者: yinjie    时间: 2006-2-13 16:20
标题: re:好文!
好文!
作者: jonathanlee    时间: 2006-3-3 14:07
标题: re:再接再厉
再接再厉
作者: hzhu    时间: 2006-3-4 08:53
标题: re:看到PRC前人了,赞。HOHO
看到PRC前人了,赞。HOHO
作者: hzhu    时间: 2006-3-4 08:54
标题: re:跟个贴,哈哈接收 Interne...
跟个贴,哈哈<br>
<br>
接收 Internet 邮件<br>
Exchange 依靠 DNS、SMTP 协议、邮件分类程序、高级排队引擎以及 Exchange 路由引擎来接收 Internet 邮件。这些组件执行下列任务以便将 Internet 邮件传递到 Exchange 组织中的用户:<br>
1. 发送方 SMTP 服务器使用 DNS 查询目标域或目标服务器的首选 MX(邮件交换器)记录。DNS 返回 A(主机)记录列表,这些记录将解析为服务器的 Internet 协议 (IP) 地址。<br>
2. 发送方 SMTP 服务器启动与目标 SMTP 服务器的 25 端口的连接。目标 SMTP 服务器是位于物理网关服务器上的 SMTP 虚拟服务器,为接受邮件要发送到的域的传入 Internet 邮件而配置。<br>
3. 理想情况下,除非服务器开放中继支持(强烈反对这样做),否则,入站 SMTP 服务器将只接受发往收件人策略中定义的 SMTP 邮件域的传入邮件。 <br>
4. 接受邮件后,SMTP 虚拟服务器对该邮件创建一个信封 - 该邮件结构称为 MAILMSG。MAILMSG 包含邮件的所有属性,其中包括发件人和收件人名称。<br>
5. 邮件分类程序对全局编录服务器执行 LDAP 查询,以找到收件人的 homeMdb 属性。然后,邮件分类程序在 MAILMSG 对象上标记该 Exchange 服务器的完全限定域名 (FQDN)。homeMdb 属性是用户的主邮箱服务器,即用户的邮箱存储和邮箱所在的服务器。<br>
6. 将发生下面的两个事件之一:<br>
• 如果用户的邮箱存储位于该 Exchange 服务器上,则邮件分类程序将对邮件进行标记以便进行本地传递,然后由高级排队引擎将邮件传输到该 Exchange 存储驱动器。然后,Exchange 存储驱动器将邮件传递到邮箱存储。<br>
• 如果用户的邮箱存储不位于该 Exchange 服务器上,则邮件分类程序将邮件传输到高级排队引擎。然后,高级排队引擎调用 Exchange 路由引擎,以确定将邮件发送到服务器的最佳途径(基于链接状态路由),并确定邮件到达用户的主服务器的路径中的下一目的地或下一跃点。<br>
7. 最后,高级排队引擎借助邮件分类程序所提供的目的地信息以及路由引擎所提供的路由信息,以下列方式之一将邮件发送到其最终目的地:<br>
• 如果目的地是本地域,则邮件将被传递到位于用户邮箱所在的 Exchange 服务器上的 SMTP 虚拟服务器。如果用户的邮箱位于远程路由组中,则邮件可能必须通过其他连接器发送。<br>
• 如果目的地在 Exchange 组织之外,则通过另一个远程队列将邮件传递到远程域的 SMTP 服务器。只有在应用了下面的某个配置的情况下,传入邮件才会发送到远程域:<br>
• Exchange 服务器开放了中继支持。 <br>
• 发送邮件的用户拥有中继权限。<br>
• 配置了另一个连接器以便允许将邮件中继到这些域。<br>
• 如果目的地是连接另一个系统或早期版本 Exchange 的连接器,则 Exchange 存储驱动器将邮件提交到邮件传输代理 (MTA)。<br>
发送 Internet 邮件<br>
Exchange 发送 Internet 邮件时所依靠的组件与接收 Internet 邮件时所依靠的组件相同:DNS、SMTP 协议、邮件分类程序、高级排队引擎以及 Exchange 路由引擎。Exchange 通过以下方式发送 Internet 邮件:<br>
1. 内部用户向远程域发送邮件。该邮件是在用户邮箱所在的 Exchange 服务器上提交的。<br>
2. 该邮件通过下面的两种方式之一提交到高级排队引擎:<br>
• 如果邮件是使用 Microsoft Office Outlook
作者: 钉子    时间: 2006-6-20 17:43
此系列文章已全部在文章区发布,为节省时间,请大家到以下地址阅读:

1.Exchange传输组件大揭秘(上)(1)
http://www.5dmail.net/html/2006-6-20/2006620163013.htm

2.Exchange传输组件大揭秘(上)(2)
http://www.5dmail.net/html/2006-2-13/2006213174247.htm

3.Exchange传输组件大揭秘(中)
http://www.5dmail.net/html/2006-6-20/2006620154133.htm

4.Exchange传输组件大揭秘(下)
http://www.5dmail.net/html/2006-6-20/2006620163013.htm

5.<<Exchange传输组件大揭秘>>全套DOC格式下载
http://www.5dmail.net/down/SoftList-2384.htm

作者: atong999888    时间: 2006-6-20 22:00
楼上的辛苦了, 收藏了,谢谢
作者: kevin_kowk    时间: 2006-6-21 17:19
好贴,应该置顶

PS:好像全套DOC格式的无法下载!




欢迎光临 邮件服务器-邮件系统-邮件技术论坛(BBS) (http://5dmail.net/bbs/) Powered by Discuz! X3.2