Linux中国 Linux中国门户站!
设为主页 设为主页
收藏本站 收藏本站
 
当前位置 :首页 ->网络应用 ->邮件服务器 ->Exchange Server ->正文

Exchange传输组件大揭秘(中)

来源:Linuxdby.com 作者:Webmaster 时间:2007-05-28 点击: [收藏] [投稿]
导读:
本文根据笔者在微软Technet Webcast上的讲稿整理而成。文章介绍了微软Exchange Server中的核心传输组件以及它们的工作原理,阐述了SMTP协议的内容和使用SMTP发送邮件时的详细过程;深入地讨论了邮件传输和路由的工作机制,分析了SMTP报文的组成和Exchange在传输邮件时的路由过程(包括AQ, Routing Engine等组件)。本文可以供Exchange管理员深入的了解邮件传输组件的内部工作方式。
上期回顾
在上一期的《Exchange传输组件大揭秘-上》中,笔者讨论了SMTP协议的工作方式,协议命令字和MIME编码的基础知识,同时也介绍了Exchange Server传输模块的构成和基于事件触发机制的工作原理。本文我们将继续上一期的讨论,来深入的挖掘Exchange Server传输组件背后鲜为人知的秘密。
基于事件触发机制的邮件传输过程
上一期文章的末尾,我们提到了Exchange Server传输模块中的高级队列引擎(Advanced Queuing Engine,下文简称AQE)。作为传输模块的核心,AQE在邮件传输过程中起到了至关重要的作用,投递过程中很多关键的操作都是在AQE中完成的。
Windows IIS自带的SMTP服务使用Aqueue.dll作为高级队列处理组件,在安装Exchange Server时,安装程序使用Phatq.dll取代了Aqueue.dll,作为Exchange Server的高级队列处理组件。AQE的主要作用是控制邮件传输过程,触发相应的事件并调用Event Sink进行邮件的进一步处理。从邮件被提交到AQE内部到最终被投递,AQE会触发如下的事件:
SMTP Transport OnSubmission
等待传输的邮件只有被提交到AQE中以后,才会被分类器和路由引擎处理,这个称之为OnSubmission(也叫OnTransportSubmission)的事件在邮件通过SMTP连接或Exchange数据库提交到AQE以后被触发。事件触发后,AQE负责调用与此事件关联的Event Sink。Exchange的传输层反病毒API与此事件相关联,用来实现邮件被传输之前的病毒检测和扫描。我们也可使用CDO之类的编程技术,来开发自定义的Event Sink与此事件相关联,CDO中的CDO_OnArrival事件实际上就是对OnTransportSubmission的包装,通过CDO_OnArrival事件可以得到实际被传输的邮件的句柄,对邮件进行特殊的操作。具体可以参考微软知识库:837851, “How to configure an Internet Information Services SMTP virtual server to archive or to remove messages in an Exchange Server 2003 test environment”
SMTP Transport OnCategorize
OnCategorize并不是一个单独的事件,而是当邮件被分拣处理时产生的一系列事件(共有十个单独的事件)。与这个事件群相关联的Event Sink我们称之为分类器(Categorizer),在Exchange 2003中,共有两个分类器与OnCategorize事件群进行了关联,他们分别是Exchange Categorizer(phatcat.dll) 和Outlook Mobile Access Push Categorizer(miscat.dll)。前者用于完成诸如收/发件人地址解析、DL分拆、收件人限制检查等等常规的分类器职责(这些职责则在下文会详细讨论),后者是用来完成为手机用户发送邮件到达提醒的特殊功能。
SMTP Transport OnGetMessageRouter
该事件在邮件被认为需要进行远程投递或者路由解析时被触发。同OnCategorize一样,这也是一个事件群。与此事件群相关联的Event Sink是Exchange Router模块(会在下一期的连载中详细讨论)。
SMTP Transport OnMsgTrackLog
与此事件关联的是Messaging Tracking日志记录组件,这个Event Sink负责记录邮件投递过程中的日志,可以通过Exchange System Manager来启动此功能并且进行邮件投递的追踪。(请参考微软知识库文档:How to enable message tracking in Exchange Server http://support.microsoft.com/default.aspx?scid=kb;en-us;246856)
SMTP Transport OnDnsResolveRecord
此事件在系统需要把一个目标域名解析为MX记录的IP地址时被触发,与此事件相关联的Event Sink是Exchange LoadBalancer。该组件负责DNS解析并在有多个路由组连接器存在的情况下进行负载平衡。
SMTP StoreDriver
此事件在邮件需要被保存到硬盘或者数据库时被触发。同OnCategorize一样,这也是一个事件群,这些事件与Store Driver进行关联,当邮件需要被保存时,由Store Driver负责执行对文件系统和数据库的读写操作(下一期的文章会对此事件群作深入的讨论)。
上面我们简单的列出了由AQE触发的事件,可以看出,其中的三个事件群(分别是OnCategorize、OnGetMessageRouter和StoreDriver)在邮件的投递过程中起着至关重要的作用,他们负责了激活相应的邮件的分类、路由和存储Event Sink。在进一步研究这些Event Sink组件的工作内容时,我们再通过一张图来回顾一下由AQE触发的事件。(图一)


图一:由AQE触发的事件
在上文中我们提到,Exchange Server传输组件内共有四种类型的事件,如果把上面提到的这些重要事件按照类别进行归类,我们可以发现其中大部分的事件属于SMTP传输事件。在Exchange Transport模块中,微软一共开发了6个Event Sink来响应这些SMTP传输事件,他们的名字和作用如下表:

Event Sink名称
作用
Exchange Transport XEXCH50 Submission
该Event Sink响应OnSubmission 事件,它的主要代码在Peexch50.dll 中被实现。这个Event Sink的主要作用是处理Exchange Server间的通信。所有的服务器内部通信也是通过SMTP协议来完成的,他们使用XEXCH50 这个微软自定义的命令字。


 如果您对本文有任何疑问或者建议,请到讨论区发表您的意见: >> 论坛入口 <<



上一篇:ExRAP 检测到的 Exchange 配置和操作问题   下一篇:为通过身份验证连接和匿名连接配置 SMTP

文章评论】 【收藏本文】 【推荐好友】 【打印本文】 【我要投稿】 【论坛讨论
更多相关文章