Exchange传输组件大揭秘(中)(3)

2008-02-23 06:06:04来源:互联网 阅读 ()

新老客户大回馈,云服务器低至5折

Exchange Server通过一个叫做RUS(Recipient Update Service)的过程,根据Recipient Policy中设定好的地址类型来自动生成的。用户是活动目录中的对象,这些邮件地址,就是这个对象上的属性。
How the Recipient Update Service applies recipient policies
http://support.microsoft.com/default.aspx?scid=kb;en-us;328738
当邮件分类器需要解析收件人邮件地址并进行投递时,他会根据邮件报文中的proxyAddresses字段来进行活动目录查询,以获取收件人在活动目录中的对象和其他的一些属性。不同的发送协议(SMTP/MTA)和邮件客户端(MAPI/SMTP)会在信件写入不同的proxyAddresses,可能是SMTP地址,也可能是X.400或Legacyexchangedn。Exchange的BuildQuery过程会根据这些proxyAddresses生成一个LDAP的查询,比如,当邮件的收件人为mike@microsoft.com时,查询语句为:(proxyAddresses=smtp:mike@microsoft.com)。假如活动目录中有这个用户,查询会返回对这个用户对象的引用和一系列进行邮件投递的必要属性,比如:Homemdb、Homemta、msExchHomeServerName、msExchMailboxSecurityDescriptor、msExchMailboxGuid。通过这些属性,Exchange传输系统就会知道这个用户的邮箱位置等信息。
查询单个用户是最简单的情况,在收件人是邮件组时,会涉及到各种不同类型邮件组地址格式处理和连接邮件组解析服务器等操作,情况会复杂很多。简单来说,BuildQuery会配合其他的组件采用递归查询的方式解析收件人中的各个项目,直到任何的收件人都被查到为止。
BuildQuery过程也会查询发件人的信息,这是为了处理发件人限制、权限之类的情况。
BuildQuery只是万里长征的第一步,当结束了用户地址查询,并获取了用户对象的若干属性后,CAT引擎将进行更进一步的邮件处理。
第二:ExpandItem和特别邮件的处理
在ExpandItem阶段,传输引擎会执行预先定义的邮件发送限制、转发配置和进行邮件拆分,下面我们周详的看一下每一个过程。
Restriction checking
这个过程检查收件人和发件人是否有收发送邮件的权限和邮件尺寸方面的限制,举例来说,假如管理员在Exchange中设定不允许一封邮件中的收件人超过特定的数量,分类器会通过在BeginMessageCategorization的时候初始化一个计数器,并在解析收件人的时候用这个计数器计算这封邮件一共有多少个收件人。假如超过了预先设定的数量,分类器就会通知AQE进入到退信流程:AQE会产生错误代码为5.5.3的退信给发件人。
Alternate recipients
我们能够在活动目录中配置把发给某人的邮件作自动转发(活动目录用户属性->Exchange General->Delivery Options)。这个过程的具体实现就是在ExpandItem中完成的。分类器会根据转发的设定,在收件人列表中(只在SMTP信封上添加,正文部分看不到转发地址)添加被转发的邮箱地址。在到达最终目的地之前,邮件有时候需要在组织内的多台服务期间传递,为了避免转发地址被多次添加(每经过一台服务器,SMTP服务器都会执行分类器操作和转发检测),当第一次执行分类器操作并添加好转发地址以后,分类器会在邮件上做一个XEXCH50的标识,这样当下一个服务器看到此邮件时,就不会作重复的转发解析工作了。
同时,分类器也会检查潜在的转发循环情况(A转发给B,B转发给C,C又转发给A)。假如循环被侦测到,分类器会通知AQE,后者即刻生成错误代码为5.4.6的退信给发件人。
Message bifurcation(邮件分拆)
前面两个过程比较简单,现在我们讨论相对复杂得多的“Message bifurcation”过程。当发送一份邮件给若干个收件人时,在一些特别情况下,每个收件人收到的信息内容和格式必须不相同,这时就需要通过bifurcation过程来制作邮件的副本。读者可能无法理解为什么同一封邮件的收件人希望接收到不同格式和内容的邮件,我们举一个例子:
想象一下当一封信件被发给一个名为“Steven Sun”的用户和“Company All Employee”邮件组这两个地址时,前者是个普通的收件人,而后者是个组,并且该组的成员是隐藏不可见的。发信人设定了这封邮件的送达回执和阅读回执,但是因为收件人中有一个隐藏成员的组,Exchange必须采取某些措施来避免送达回执向发件人泄漏组中的成员。Exchange采用bifurcation为此邮件制作两个副本,第一个副本是给Steven Sun的,其中有正常的送达回执和阅读回执。第二个副本是给Company All Employee的,这封信中,Exchange会去掉这些引起信息泄漏的回执请求。这个过程对收信人是透明的,Bifurcation生成的两个副本,只是在其SMTP信封和正文的信头中,有不同的收件人和回执设定,任何的收件人在Outlook中读到的信件正文都是相同的(假如不理解,请回忆前一期文章中提到的SMTP报文格式)。
当发送密件抄送(BCC)和使用MAPI的客户端发信给Internet用户时,还会发生更加复杂的bifurcation的过程,限于篇幅,这里不错深入的讨论。有兴趣的读者,能够参考如下的链接:
http://www.microsoft.com/technet/prodtechnol/exchange/guides/E2k3TechRef/a3485026-00df-41ad-bb21-8acbc962895a.mspx
第三:CompleteItem和路由、投递前的准备工作
经过一些列Categorizer Event Sink处理后,邮件的目的地和收件人相应的属性都已确定,在把邮件交给路由引擎选路和进行投递之前,Categorizer会做一些最后的收尾工作,并为路由和投递准备好需要的信息,这个过程包括:邮件归档、写入收件人标示、投递状态结果的处理等等。
Journaling
邮件归档(Journaling)是把某个指定的邮箱数据库中的用户发送和接收的邮件做一个自动归档的过程(请参考:XADM: How to Enable the "Message Journaling" Function for an Exchange Server Mailbox Store http://support.microsoft.com/default.aspx?scid=kb;en-us;261173)。分类器会根据BuildQuery过程获取的用户HomeMDB属性来判断此用户的邮件是否需要做归档,假如需要归档,分类器在邮件的收件人列表中加入归档邮箱(使用BCC方式隐藏,因此用户感觉不感到归档过程,这和上文提到的邮件转发是不同的过程)。

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇: Exchange Server 2003 配合使用的防病毒软件概述

下一篇: 如何启用对 Internet 的外出时答复