传输代理概述

 

适用于: Exchange Server 2007 SP3, Exchange Server 2007 SP2, Exchange Server 2007 SP1, Exchange Server 2007

上一次修改主题: 2007-07-17

通过传输代理,您可以在运行 Microsoft Exchange Server 2007 的计算机上安装由 Microsoft、第三方供应商或您的组织创建的自定义软件。然后,此软件可用于处理通过集线器传输服务器或边缘传输服务器上的传输管道的电子邮件。自定义传输代理可为 Exchange 2007 提供附加功能,例如反垃圾邮件或反病毒程序,或者组织可能需要的任何传输功能。

传输代理通常自动随用于与 Exchange 2007 协同工作的应用程序一起安装。但是,有时,组织可能希望开发自己的传输代理来管理通过其 Exchange 2007 组织的邮件。

Caution警告:
传输代理对其遇到的所有电子邮件都具有完全访问权限。Exchange 对传输代理的行为没有任何限制。不稳定的或带有安全缺陷的传输代理可能会影响 Exchange 的稳定性和安全性。因此,您只能安装自己完全信任并且已在测试环境中经过全面测试的传输代理。

有关如何编写新传输代理的信息,请参阅“Microsoft Exchange Server 2007 SDK 文档”中的 Transport Agents

有关 Exchange 2007 中的传输管道的详细信息,请参阅传输体系结构

传输代理和 SMTP 事件

为 Exchange 2007 编写的传输代理使用简单邮件传输协议 (SMTP) 事件。邮件在传输管道中移动时会触发这些事件。SMTP 事件使传输代理可以在 SMTP 会话期间以及通过组织路由邮件期间,在特定的时间点访问邮件。表 1 列出了可提供对传输管道中邮件的访问权限的 SMTP 事件:

表 1 SMTP 事件

序列 SMTP 事件 说明

1

OnConnectEvent

从远程 SMTP 主机建立初始连接后将触发此事件。

2

OnHeloCommand

远程 SMTP 主机发出 HELO SMTP 谓词时将触发此事件。

3

OnEhloCommand

远程 SMTP 主机发出 EHLO SMTP 谓词时将触发此事件。

4

OnAuthCommand

远程 SMTP 主机发出 AUTH SMTP 谓词时将触发此事件。

5

OnEndOfAuthentication

远程 SMTP 主机完成身份验证时将触发此事件。

6

OnMailCommand

远程 SMTP 主机发出 MAIL FROM SMTP 谓词时将触发此事件。

7

OnRcptCommand

远程 SMTP 主机发出 RCPT TO SMTP 谓词时将触发此事件。

8

OnDataCommand

远程 SMTP 主机发出 DATA SMTP 谓词时将触发此事件。

9

OnEndOfHeaders

远程 SMTP 主机完成提交电子邮件头时将触发此事件。

10

OnEndOfData

远程 SMTP 主机发出用于指示数据末尾的 <CRLF>.<CRLF> 时,将会触发此事件。

**

OnHelpCommand

远程 SMTP 主机发出 HELP SMTP 谓词时将触发此事件。此事件在 OnConnectEvent SMTP 事件之后和 OnDisconnectEvent SMTP 事件之前随时都可以发生。

**

OnNoopCommand

远程 SMTP 主机发出 NOOP SMTP 谓词时将触发此事件。此事件在 OnConnectEvent SMTP 事件之后和 OnDisconnectEvent SMTP 事件之前随时都可以发生。

**

OnReject

接收 SMTP 主机向发送 SMTP 主机发出临时或永久传递状态通知 (DSN) 代码时将触发此事件。此事件在 OnConnectEvent SMTP 事件之后和 OnDisconnectEvent SMTP 事件之前随时都可以发生。

**

OnRsetCommand

发送 SMTP 主机发出 RSET SMTP 谓词时将触发此事件。此事件在 OnConnectEvent SMTP 事件之后和 OnDisconnectEvent SMTP 事件之前随时都可以发生。

11

OnDisconnectEvent

接收或发送 SMTP 主机断开 SMTP 会话后,将会触发此事件。

12

OnSubmittedMessage

向接收 SMTP 主机上的“提交”队列提交邮件后将触发此事件。无论邮件是通过 SMTP 提交、MAPI 提交还是通过分拣目录或重播目录到达的,所有邮件都会遇到此事件。

13

OnResolvedMessage

在解析所有收件人之后到为每个收件人确定跃点之前的这段时间,将触发此事件。使用 OnResolvedMessage 路由事件,能够通过每个收件人的 SetRoutingOverride 方法使用后续事件覆盖默认的路由行为。

note注意:
OnResolvedMessage 路由事件仅在 Exchange 2007 Service Pack 1 (SP1) 中可用。

14

OnRoutedMessage

对邮件进行分类、扩展通讯组列表并且解析了收件人后,将会触发此事件。

可以在表 1 中列出的任何 SMTP 事件上注册传输代理。但是,传输代理的预定操作通常会指定要在哪些 SMTP 事件上运行。

对于反垃圾邮件代理而言,最重要的考虑因素并非邮件内容的合法性,而是在哪个时间点上识别和拒绝有效的垃圾邮件。拒绝已确认为垃圾邮件的邮件越早,组织耗用的成本越低。在 OnEndOfData SMTP 事件之前触发的所有 SMTP 事件不要求接收 SMTP 主机生成未送达回执 (NDR)。不生成 NDR 的原因是发生 OnEndOfData SMTP 事件之前未传递完整的邮件内容。因此,发送 SMTP 主机仍然需要负责邮件的最终传递。如果接收 SMTP 主机在 OnEndOfData SMTP 事件之前发生故障,则发送 SMTP 主机必须向邮件发件人生成 NDR。发生 OnEndOfData SMTP 事件后,接收 SMTP 主机已接受完整的邮件内容。这意味着 SMTP 主机现在需要负责成功传递邮件并向邮件发件人生成和发送 NDR。因此,关键的是反垃圾邮件代理需要在发生 OnEndOfData SMTP 事件之前,在 SMTP 事件上注册其自身,以减小接收 SMTP 主机存储邮件内容且必须向邮件发件人生成 NDR 的可能性。

但对于反病毒代理而言,最重要的考虑因素是确保扫描每封邮件。必须为 OnSubmittedMessage SMTP 事件配置必须查看每封邮件的代理。经过传输管道的每封邮件都将发生 OnSubmittedMessage SMTP 事件,因为在经过所有可能的提交入口点之后会发生这种情况,例如,从远程主机进行的 SMTP 提交、从运行邮箱服务角色的计算机进行的 MAPI 提交、自定义应用程序使用的分拣目录或第三方电子邮件应用程序使用的重播目录。

传输代理的优先级顺序

通过 Exchange 2007,您可以指定 Exchange 包含的以及自定义应用程序添加的传输代理的优先级。如果指定了传输代理的优先级,则可以控制哪些代理将首先应用于邮件。为传输代理分配的优先级可以是 1 或更高。优先级接近 1 的传输代理将最先应用于邮件。但是,为传输代理分配的优先级只是用于确定向邮件应用传输代理时遵循的顺序的一个因素。用于确定传输代理优先级的第二个因素是,包含已注册传输代理的 SMTP 事件应定位在 SMTP 事件序列的哪个位置。

如本主题中前文部分的表 1 所示,SMTP 事件具有特定的序列,将这些事件应用到流经传输通道的邮件时将遵循此序列。例如,OnConnectEvent SMTP 事件总是在 OnHeloCommandOnEhloCommand SMTP 事件之前发生。由于传输代理将注册到特定的 SMTP 事件,因此这意味着,无论分配到 OnEhloCommand SMTP 事件上的传输代理的优先级如何,都始终首先将 OnConnectEvent SMTP 事件上注册的传输代理应用于邮件。

例如,可以将传输代理配置如下:

  • 优先级为 1 的传输代理 AgentA,注册到 OnEndofHeaders SMTP 事件

  • 优先级为 4 的传输代理 AgentB,注册到 OnMailCommand SMTP 事件

使用 Get-TransportAgent cmdlet 查看已注册的代理的列表时,列出的传输代理 AgentA 的优先级高于传输代理 AgentB。但是,当邮件流经传输管道时,传输代理 AgentB 会先于传输代理 AgentA 应用到该邮件,因为 OnMailCommand SMTP 事件在 OnEndOfHeaders SMTP 事件之前遇到此邮件。

在同一 SMTP 事件上注册两个或更多传输代理时,为传输代理分配的优先级才起作用。如果在 OnEndofHeaders SMTP 事件上同时注册了传输代理 AgentA 和传输代理 AgentB,那么,当邮件遇到该事件时,传输代理 AgentA 会先于 AgentB 应用到该邮件。如果传输代理 AgentB 同时在 OnEndOfHeadersOnMailCommand SMTP 事件上注册,则该传输代理将应用到邮件两次。将首先应用传输代理 AgentB,因为它已注册到 OnMailCommand SMTP 事件。然后,当邮件遇到同时注册了传输代理 AgentA 和传输代理 AgentBOnEndOfHeaders SMTP 事件时,将会应用传输代理 AgentA,因为该传输代理的优先级高于传输代理 AgentB。最后,将第二次应用传输代理 AgentB

内置传输代理

Exchange 2007 拥有的多个默认传输代理使其可以提供传输规则和日记等功能。默认情况下,将在集线器传输服务器和边缘传输服务器上安装下列各表中列出的传输代理。下列各表还提供了包含每个代理的详细信息的主题。

表 2   集线器传输服务器传输代理

代理名 优先级 SMTP 事件 说明

传输规则代理

1

OnRoutedMessage

传输规则概述

日记代理

2

OnSubmittedMessage、OnRoutedMessage

日记概述

Active Directory 权限管理服务 (AD RMS) 预许可代理

note注意:
AD RMS 预许可代理仅在 Exchange 2007 SP1 中可用。默认情况下它处于禁用状态。

3

OnRoutedMessage

了解 AD RMS 预许可代理

表 3   边缘传输服务器传输代理

代理名 优先级 SMTP 事件 相关主题

连接筛选代理

1

OnConnectEvent、OnMailCommand、OnRcptComand、OnEndOfHeaders

连接筛选

地址重写入站代理

2

OnRcptCommand、OnEndOfHeaders

规划地址重写

边缘规则代理

3

OnEndOfData

传输规则概述

内容筛选器代理

4

OnEndOfData

内容筛选

发件人 ID 代理

5

OnEndOfHeaders

发件人 ID

发件人筛选器代理

6

OnMailCommand、OnEndOfHeaders

发件人筛选

收件人筛选器代理

7

OnRcptCommand

收件人筛选

协议分析代理

8

OnEndOfHeaders、OnEndOfData、OnReject、OnRsetCommand、OnDisconnectEvent

管理协议日志记录

附件筛选代理

9

OnEndOfData

附件筛选

地址重写出站代理

10

OnRcptCommand、OnEndOfHeaders

规划地址重写

传输代理故障排除

通过传输代理,Exchange 可帮助用户控制电子邮件在组织内的传输过程。这样,便可以使 Exchange 基础结构符合组织的要求,而不是强行使组织符合电子邮件基础结构。自定义环境时,环境的复杂程度将会提高。为帮助您解决可能出现的问题,以及确保按期望方式将更改应用到邮件,Exchange 提供了下列功能:

  • Get-TransportPipeline cmdlet**   Get-TransportPipeline** cmdlet 显示所有已启用的传输代理以及这些传输代理注册到的 SMTP 事件,这些 SMTP 事件在启动 Microsoft 传输服务之后到运行该 cmdlet 之前的这段时间遇到了传输管道中的邮件。有关详细信息,请参阅如何查看传输管道中的传输代理

    note注意:
    只有在通过传输管道发送邮件后,才生成由 Get-TransportPipeline cmdlet 显示的信息。并且,只显示遇到邮件的传输代理。
  • **管道跟踪 **  使用管道跟踪,能够在邮件遇到每个传输代理前后,创建整个邮件的确切快照。使用管道跟踪,您还能够确定哪个传输代理生成了意外结果,或者验证传输代理是否按预期运行。有关详细信息,请参阅使用管道跟踪诊断传输代理问题

详细信息

有关传输代理的详细信息,请参阅下列主题: