Exchange传输组件大揭秘(中)我们可以在Exchange管理器的Recipient->Recipient Policy->Default Policy->属性->E-mail address中看到当前的Exchange系统支持的地址类型。默认支持的地址类型是SMTP和X.400(这两个类型不允许被删除)。我们也可以添加诸如cc:Mail、Louts Notes、Novell GroupWise之类的地址类型,当Exchange Server通过外部连接器和这些第三方的邮件系统连接时,这些地址就会发挥作用。(此处不深入讨论) 我们重点看SMTP地址类型。默认请况下,Exchange里面的SMTP地址类型中的SMTP域名和活动目录的域名是一致的,但是需要明确的是,此处的SMTP域和活动目录域是完全不同和没有丝毫关系的。举例来说,我们可以在公司内网建立一个名为msft.com的AD域,然后在Internet上申请到一个my-domain.com的公网域名。我们可以在Recipient Policy中添加这个my-domain.com的域名,使Exchange系统意识到它有责任接收和处理发给my-domian.com的邮件(在公网DNS上设定my-dmomina.com的MX记录)。并且,我们可以设定my-domian.com为主SMTP地址,这样所有外发到Internet的邮件,都会使用@my-domina.com作为其发信人地址。如下图(图三):
![]() 图三:Recipient Policy 关于Recipient Policy中SMTP地址的设定和自定义,请参考下面的文章: XIMS: How to Receive Messages for Two SMTP Domains http://support.microsoft.com/support/kb/articles/q289/8/33.asp 当在活动目录中创建用户时,如果我们细心观察就会发现,系统并没有让管理员输入用户的SMTP地址和X.400地址中的任何一种地址!对于一个有邮箱的用户来说,他的邮件地址是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报文格式)。
上一篇:ExRAP 检测到的 Exchange 配置和操作问题 下一篇:为通过身份验证连接和匿名连接配置 SMTP 更多相关文章
|
推荐文章
精彩文章
|