Exchange Server 中的传输代理
通过传输代理,您可以在 Exchange 服务器上安装由 Microsoft、第三方供应商或您的组织创建的自定义软件。 随后该软件便可以处理通过传输管道的电子邮件。 在 Microsoft Exchange Server 2016 或 2019 中,传输管道由以下过程组成:
- 邮箱服务器上的前端传输服务
- 邮箱服务器上的传输服务
- 邮箱服务器上的邮箱传输服务
- 边缘传输服务器上的传输服务
有关传输管道的详细信息,请参阅 邮件流和传输管道
Exchange 传输通过 Microsoft Exchange Server 传输代理 SDK 提供扩展性。 Exchange 版本的 SDK 允许第三方实现以下预定义类:
- SmtpReceiveAgent
- RoutingAgent
- DeliveryAgent
当针对 SDK 中的库进行编译时,生成的程序集将注册到 Exchange,Exchange 会在 SMTP 会话或消息处理的特定阶段加载代理并调用其事件处理程序。 这些阶段或事件,是代理定义的一部分。 代理注册信息存储在 XML 配置文件中。
以下列表说明了在 Exchange 中使用传输代理的要求。
- 邮箱服务器和边缘传输服务器上的传输服务完全支持 SDK 中的所有预定义类。
- 前端传输服务仅支持 SDK 中的 SmtpReceiveAgent 类,第三方代理不能对 OnEndOfData SMTP 事件进行操作。
- 邮箱传输服务根本不支持 SDK,因此不能在邮箱传输服务中使用任何第三方代理。
传输代理管理
传输代理 cmdlet 需要区分传输服务和前端传输服务。 传输代理管理 cmdlet 操作位于 的%ExchangeInstallPath%TransportRoles\Shared
配置文件agents.config
。
有关详细信息,请参阅在 Exchange Server 中管理传输代理。
传输代理和 SMTP 事件
传输代理使用 SMTP 事件。 邮件在传输管道中移动时会触发这些事件。 SMTP 事件使传输代理可以在 SMTP 会话期间以及通过组织路由邮件期间,在特定的时间点访问邮件。
SMTP 接收存在于邮箱服务器上的前端传输服务、邮箱服务器和边缘传输服务器上的传输服务和邮箱服务器上的邮箱传输传递服务中。 分类程序只存在于邮箱服务器和边缘传输服务器上的传输服务。 有关传输服务和分类程序的详细信息,请参阅 Exchange Server 中的邮件路由。
下表列出了可提供对传输管道中邮件的访问权限的 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 主机发出数据结束命令时,会触发此事件:
|
** | OnHelpCommand | 如果命令由远程 SMTP 主机发出, HELP 则会触发此事件。 |
** | OnNoopCommand | 如果命令由远程 SMTP 主机发出, NOOP 则会触发此事件。 |
** | OnReject | 如果接收的 SMTP 主机向发送 SMTP 主机发出临时或永久传递状态通知, (也称为 DSN、未送达报告、NDR 或退回邮件) 代码,则会触发此事件。 |
** | OnRsetCommand | 如果发送 SMTP 主机发出命令, RSET 则会触发此事件。 |
15 | OnDisconnectEvent | 接收或发送 SMTP 主机断开 SMTP 会话前,将触发此事件。 通常,当远程 SMTP 主机发出命令时 QUIT ,就会发生这种情况。 |
** 在 OnConnectEvent 之后和 OnDisconnectEvent 之前,随时可以发生这些事件。
分类程序事件
序列 | 分类程序事件 | 说明 |
---|---|---|
1 | OnSubmittedMessage | 当邮件到达接收 Exchange 服务器上的传输服务的提交队列时,将触发此事件。 |
2 | OnResolvedMessage | 在解析所有收件人之后到为每个收件人确定跃点之前的这段时间,将触发此事件。 使用 OnResolvedMessage 路由事件,能够通过每个收件人的 SetRoutingOverride 方法使用后续事件覆盖默认的路由行为。 |
3 | OnRoutedMessage | 对邮件进行分类、扩展通讯组列表并且解析了收件人后,将会触发此事件。 |
4 | OnCategorizedMessage | 分类程序完成邮件处理时,将触发此事件。 |
传输代理的优先级
两个因素决定了传输代理在传输管道中对消息进行操作的顺序:
- 注册传输代理位置的 SMTP 事件,以及该 SMTP 事件遇到邮件的时间。
- 多个代理注册到同一个 SMTP 事件时,分配给传输代理的优先级值。 最高优先级为 1。 较高的整数值表示较低的代理优先级。
例如,假设您已配置以下传输代理:
- 优先级为 1 的传输代理 A 与优先级为 2 的传输代理 C 被注册到 OnEndOfHeaders SMTP 事件。
- 优先级为 4 的传输代理 B 被注册到 OnMailCommand SMTP 事件。
因为 OnMailCommand 事件在 OnEndOfHeaders 事件之前遇到邮件,因此传输代理 B 最先应用于邮件。 当邮件到达 OnEndOfHeaders 事件时,因为传输代理 A 优先级高于(整数值低于)传输代理 C,所以在传输代理 C 之前先应用传输代理 A。
内置传输代理
Exchange Server包括许多内置传输代理,这些代理提供反垃圾邮件、传输规则和日记等功能。 Exchange 邮箱服务器上的大多数内置传输代理都不可见,无法由传输代理管理 cmdlet 管理。 几乎所有可见且可管理的内置传输代理都位于邮箱服务器和边缘传输服务器上的传输服务中。
邮箱服务器上更令人关注的内置传输代理详见下表。 请注意,此表不包括许多不可见且不受管理的传输代理。
邮箱服务器上令人关注的内置传输代理
代理名 | 易于管理? | 优先级 | SMTP 或分类程序事件 |
---|---|---|---|
传输规则代理 | 是 | 1 | OnResolvedMessage |
DLP 策略代理 | 是 | 2 | OnResolvedMessage |
保留策略代理 | 是 | 3 | OnResolvedMessage |
监督评审代理 | 是 | 4 | OnResolvedMessage |
恶意软件代理 | 是 | 5 | OnSubmittedMessage |
文本消息路由代理 | 是 | 6 | OnSubmittedMessage |
文本消息传递代理 | 是 | 7 | 不适用 |
系统探测删除 Smtp 代理 | 是 | 8 | OnEndOfHeaders |
系统探测删除路由代理 | 是 | 9 | OnCategorizedMessage |
日记代理 | 否 | 无法配置 | OnRoutedMessage |
日记报告解密代理 | 否 | 无法配置 | OnCategorizedMessage |
RMS 解密代理 | 否 | 无法配置 | OnSubmittedMessage |
RMS 加密代理 | 否 | 无法配置 | OnSubmittedMessage OnRoutedMessage |
RMS 协议解密代理 | 否 | 无法配置 | OnEndOfData |
边缘传输服务器上令人关注的内置传输代理
通过传输代理管理 cmdlet 或其他特定功能 cmdlet,边缘传输服务器上的大多数内置传输代理均可见且易管理。
边缘传输服务器上更令人关注的内置传输代理详见下表。 请注意,此表不包括不可见或不受管理的传输代理。
代理名 | 易于管理? | 优先级 | SMTP 或分类程序事件 |
---|---|---|---|
连接筛选代理 | 是 | 1 | OnConnectEvent OnMailCommand OnRcptCommand OnEndOfHeaders |
地址重写入站代理 | 是 | 2 | OnRcptCommand 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 事件和相应的传输代理。 有关详细信息,请参阅 在 Exchange Server 中查看传输管道中的传输代理。
管道跟踪:管道跟踪在遇到每个传输代理之前和之后创建消息的确切快照。 这使您可以找到导致意外结果的传输代理。 有关详细信息,请参阅 管道跟踪。