传输代理

适用于:Exchange Server 2013

通过传输代理,您可以在 Exchange 服务器上安装由 Microsoft、第三方供应商或您的组织创建的自定义软件。 随后该软件便可以处理通过传输管道的电子邮件。 在 Microsoft Exchange Server 2013 中,传输管道由以下进程组成:

  • 客户端访问服务器上的前端传输服务

  • 邮箱服务器上的传输服务

  • 邮箱服务器上的邮箱传输服务

  • 边缘传输服务器上的传输服务

有关传输管道的详细信息,请参阅邮件流

如同以前版本的 Exchange,Exchange 2013 传输通过 Microsoft Exchange Server 2013 传输代理 SDK 提供扩展性。 该 SDK 的 Exchange 2013 版本基于 Microsoft .NET Framework版本 4.0,允许第三方实现以下预定义类:

  • SmtpReceiveAgent

  • RoutingAgent

  • DeliveryAgent

在遵照 SDK 库时,结果程序集通过 Exchange 2013 注册,这样会在 SMTP 会话或邮件处理的某个特定阶段加载代理,并调用代理的时间处理器。 这些阶段或事件,是代理定义的一部分。 代理注册信息存储在 XML 配置文件中。

以下列表说明了在 Exchange 2013 中使用传输代理的要求。

  • 邮箱服务器和边缘传输服务器上的传输服务完全支持 SDK 中的所有预定义类,因此,为 Microsoft Exchange Server 2010 中的中心传输服务器角色或边缘传输服务器角色编写的任何第三方传输代理都应在 Exchange 2013 中的传输服务中工作。

  • 前端传输服务仅支持 SDK 中的 SmtpReceiveAgent 类,第三方代理不能对 OnEndOfData SMTP 事件进行操作。

  • 邮箱传输服务根本不支持 SDK,因此不能在邮箱传输服务中使用任何第三方代理。

对于基于 .NET Framework 4.0 之前版本的旧版传输代理的支持并非默认启用,但是可自行启用。 有关说明,请参阅启用对旧版传输代理的支持

对传输代理管理的更新

由于对 Exchange 2013 传输管道的更新,传输代理 cmdlet 需要在传输服务与前端传输服务之间进行分辨,尤其是客户端访问服务器与邮箱服务器安装在同一计算机上时。 有关详细信息,请参阅管理传输代理

传输代理管理 cmdlet 操作位于 的 %ExchangeInstallPath%TransportRoles\Shared配置文件。 对于邮箱服务器和边缘传输服务器上的传输服务,文件为 agents.config。 对于客户端访问服务器上的前端传输服务,文件为 fetagents.config。 这两个文件使用与 Exchange 2010 中相同的格式。 有关管理传输代理的详细信息,请参阅管理传输代理

传输代理和 SMTP 事件

传输代理使用 SMTP 事件。 邮件在传输管道中移动时会触发这些事件。 SMTP 事件使传输代理可以在 SMTP 会话期间以及通过组织路由邮件期间,在特定的时间点访问邮件。

请注意,Exchange 2013 中有新的 SMTP 接收事件。 客户端访问服务器上的前端传输服务、邮箱服务器和边缘传输服务器上的传输服务以及邮箱服务器上的邮箱传输传递服务中存在 SMTP 接收。 分类程序只存在于邮箱服务器和边缘传输服务器上的传输服务。 有关运输服务和分类程序的详细信息,请参阅邮件路由

下表列出了可提供对传输管道中邮件的访问权限的 SMTP 事件。

SMTP 接收事件

序列 SMTP 事件 说明
1 OnConnectEvent 通过远程 SMTP 主机的初始连接触发此事件。
2 OnHeloCommand 当远程 SMTP 主机发出命令时 HELO ,会触发此事件。
3 OnEhloCommand 当远程 SMTP 主机发出命令时 EHLO ,会触发此事件。
4 OnStartTlsCommand 当远程 SMTP 主机发出命令时 STARTTLS ,会触发此事件。
5 OnAuthCommand 当远程 SMTP 主机发出命令时 AUTH ,会触发此事件。
6 OnProcessAuthentication 处理远程 SMTP 主机的身份验证时,将触发此事件。
7 OnEndOfAuthentication 远程 SMTP 主机完成身份验证时将触发此事件。
8 OnXSessionParamsCommand 当远程 SMTP 主机发出命令时 XSESSIONPARAMS ,会触发此事件。
9 OnMailCommand 当远程 SMTP 主机发出命令时 MAIL FROM ,会触发此事件。
10 OnRcptToCommand 当远程 SMTP 主机发出命令时 RCPT TO ,会触发此事件。
11 OnDataCommand 当远程 SMTP 主机发出 (文本) 或BDAT (二进制数据) 命令时DATA,将触发此事件。
12 OnEndOfHeaders 远程 SMTP 主机完成提交电子邮件头时,将触发此事件。 这由空白行 (<CRLF>) 指示,用于分隔邮件头和邮件正文。
13 OnProxyInboundMessage 客户端访问服务器上的前端传输服务将传入 SMTP 会话中继或代理到邮箱服务器上的传输服务时,将触发此事件。
14 OnEndOfData 远程 SMTP 主机发出数据结尾命令时,将触发此事件。 对于命令 DATA 启动的文本会话,数据指示符的末尾为 <CRLF>.<CRLF>。 对于由 命令启动的 BDAT 二进制会话,数据结束指示符为 BDAT LAST
** OnHelpCommand 如果命令由远程 SMTP 主机发出, HELP 则会触发此事件。
** OnNoopCommand 如果命令由远程 SMTP 主机发出, NOOP 则会触发此事件。
** OnReject 如果接收 SMTP 主机向发送 SMTP 主机发出临时或永久传递状态通知 (DSN) 代码,则触发此事件。
** OnRsetCommand 如果发送 SMTP 主机发出命令, RSET 则会触发此事件。
15 OnDisconnectEvent 接收或发送 SMTP 主机断开 SMTP 会话前,将触发此事件。 通常,当远程 SMTP 主机发出命令时 QUIT ,就会发生这种情况。

** 在 OnConnectEvent 之后和 OnDisconnectEvent 之前,随时可以发生这些事件。

分类程序事件

序列 SMTP 事件 说明
1 OnSubmittedMessage 邮件到达接收邮箱服务器或边缘传输服务器上传输服务中的提交队列时,将触发此事件。
2 OnResolvedMessage 在解析所有收件人之后到为每个收件人确定跃点之前的这段时间,将触发此事件。 使用 OnResolvedMessage 路由事件,能够通过每个收件人的 SetRoutingOverride 方法使用后续事件覆盖默认的路由行为。
3 OnRoutedMessage 对邮件进行分类、扩展通讯组列表并且解析了收件人后,将会触发此事件。
4 OnCategorizedMessage 分类程序完成邮件处理时,将触发此事件。

传输代理的优先级

有两个因素可确定传输管道中邮件传输代理操作的顺序:

  1. 注册传输代理位置的 SMTP 事件,以及该 SMTP 事件遇到邮件的时间。

  2. 多个代理注册到同一个 SMTP 事件时,分配给传输代理的优先级值。 最高优先级为 1。 较高的整数值表示较低的代理优先级。

例如,假设您已配置以下传输代理:

  • 优先级为 1 的传输代理 A 与优先级为 2 的传输代理 C 被注册到 OnEndOfHeaders SMTP 事件。

  • 优先级为 4 的传输代理 B 被注册到 OnMailCommand SMTP 事件。

因为 OnMailCommand 事件在 OnEndOfHeaders 事件之前遇到邮件,因此传输代理 B 最先应用于邮件。 当邮件到达 OnEndOfHeaders 事件时,因为传输代理 A 优先级高于(整数值低于)传输代理 C,所以在传输代理 C 之前先应用传输代理 A。

内置传输代理

Exchange 2013 包含许多内置的传输代理,这些代理具有反垃圾邮件、传输规则和日志记录等功能。 通过传输代理 cmdlet,Exchange 2013 邮箱服务器和客户端访问服务器上的大多数内置传输代理均不可见且不受管理。 实际上,邮箱服务器和边缘传输服务器上传输服务中的所有内置传输代理均可见且易管理。

邮箱服务器上更令人关注的内置传输代理详见下表。 请注意,此表不包括许多不可见且不受管理的传输代理。

邮箱服务器上令人关注的内置传输代理

代理名 易于管理? 优先级 SMTP 或分类程序事件
传输规则代理 1 OnResolvedMessage
恶意软件代理 2 OnSubmittedMessage
文本消息路由代理 3 OnSubmittedMessage
文本消息传递代理 4 不适用
日记代理 无法配置 OnRoutedMessage
日记报告解密代理 无法配置 OnCategorizedMessage
RMS 解密代理 无法配置 OnSubmittedMessage
RMS 加密代理 无法配置 OnSubmittedMessage
OnRoutedMessage
RMS 协议解密代理 无法配置 OnEndOfData

通过传输代理管理 cmdlet 或其他特定功能 cmdlet,边缘传输服务器上的大多数内置传输代理均可见且易管理。

边缘传输服务器上更令人关注的内置传输代理详见下表。 请注意,此表不包括不可见或不受管理的传输代理。

边缘传输服务器上令人关注的内置传输代理

代理名 易于管理? 优先级 SMTP 或分类程序事件
连接筛选代理 1 OnConnectEvent
OnMailCommand
OnRcptComand
OnEndOfHeaders
地址重写入站代理 2 OnRcptComand
OnEndOfHeaders
边缘规则代理 3 OnEndOfData
内容筛选器代理* 4 OnEndOfData
发件人 ID 代理* 5 OnEndOfHeaders
发件人筛选器代理* 6 OnMailCommand
OnEndOfHeaders
收件人筛选器代理 7 OnRcptCommand
协议分析代理* 8 OnConnectEvent
OnEndOfHeaders
OnEndOfData
OnReject
OnRsetCommand
OnDisconnectEvent
附件筛选代理 9 OnEndOfData
地址重写出站代理 10 OnSubmittedMessage
OnRoutedMessage

* 您还可以在邮箱服务器上安装和配置这些反垃圾邮件代理。 有关详细信息,请参阅在邮箱服务器上启用反垃圾邮件功能

解决传输代理问题

为了帮助您解决传输代理问题,可以使用以下功能:

  • Get-TransportPipeline:此 cmdlet 显示 EXCHANGE 服务器上遇到邮件的 SMTP 事件和相应的传输代理。 有关详细信息,请参阅 查看传输管道中的传输代理

  • 管道跟踪:管道跟踪在遇到每个传输代理之前和之后创建消息的确切快照。 这使您可以找到导致意外结果的传输代理。 有关详细信息,请参阅 管道跟踪