共用方式為


Exchange Server中的傳輸代理程式

傳輸代理程式可讓您在 Exchange 伺服器上安裝由 Microsoft、協力廠商廠商或貴組織所建立的自訂軟體。 此軟體接著可以處理通過傳輸管線的電子郵件訊息。 在 Microsoft Exchange Server 2016 或 2019 中,傳輸管線是由下列程式所組成:

  • 信箱伺服器上的前端傳輸服務
  • 信箱伺服器上的傳輸服務
  • 信箱伺服器上的信箱傳輸服務
  • Edge Transport Server 上的傳輸服務

如需傳輸管線的詳細資訊,請參閱 郵件流程和傳輸管線

Exchange 傳輸可透過 Microsoft Exchange Server 傳輸代理程式 SDK 提供擴充性。 SDK 的 Exchange 版本可讓協力廠商實作下列預先定義的類別:

  • SmtpReceiveAgent
  • RoutingAgent
  • DeliveryAgent

針對 SDK 中的程式庫進行編譯時,產生的元件會向 Exchange 註冊,這會載入代理程式,並在 SMTP 會話或訊息處理的特定階段叫用其事件處理常式。 這些階段或事件是代理程式定義的一部分。 代理程式註冊資訊會儲存在 XML 組態檔中。

下列清單說明在 Exchange 中使用傳輸代理程式的需求。

  • 信箱伺服器和 Edge Transport Server 上的傳輸服務完全支援 SDK 中所有預先定義的類別。
  • 前端傳輸服務只支援 SDK 中的 SmtpReceiveAgent 類別,而且協力廠商代理程式無法在 OnEndOfData SMTP 事件上運作。
  • 信箱傳輸服務完全不支援 SDK,因此您無法在信箱傳輸服務中使用任何協力廠商代理程式。

傳輸代理程式管理

傳輸代理程式 Cmdlet 必須區分傳輸服務和前端傳輸服務。 傳輸代理程式管理 Cmdlet 會操作位於 的 %ExchangeInstallPath%TransportRoles\Shared 組態檔 agents.config

如需詳細資訊,請參閱在 Exchange Server 中管理傳輸代理程式

傳輸代理程式和 SMTP 事件

傳輸代理程式會使用 SMTP 事件。 當郵件在傳輸管線中移動時,會觸發這些事件。 在 SMTP 交談期間與在組織路由傳送郵件的特定時間點上,SMTP 事件會將郵件的存取權授與傳輸代理程式。

SMTP 接收存在於信箱伺服器的前端傳輸服務、信箱伺服器和 Edge Transport Server 上的傳輸服務,以及信箱伺服器上的信箱傳輸傳遞服務。 分類器只存在於信箱伺服器和 Edge Transport Server 上的傳輸服務中。 如需傳輸服務和分類器的詳細資訊,請參閱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 主機發出資料結束命令時,就會觸發此事件:
  • 對於 命令啟動的 DATA 文字會話,資料指標的結尾是 <CRLF>.<CRLF>
  • 針對 命令啟動的 BDAT 二進位會話,資料指標的結尾是 BDAT LAST
** OnHelpCommand 如果 HELP 命令是由遠端 SMTP 主機發出,就會觸發此事件。
** OnNoopCommand 如果 NOOP 命令是由遠端 SMTP 主機發出,就會觸發此事件。
** OnReject 如果接收的 SMTP 主機發出暫時或永久傳遞狀態通知, (也稱為 DSN、非傳遞報告、NDR 或退回的訊息,) 傳送 SMTP 主機的程式碼,就會觸發此事件。
** OnRsetCommand 如果命令是由傳送的 RSET SMTP 主機發出,就會觸發此事件。
15 OnDisconnectEvent 此事件是由接收或傳送 SMTP 主機中斷 SMTP 交談的中斷連線所觸發。 一般而言,當遠端 SMTP 主機發出命令時 QUIT ,就會發生這種情況。

** 這些事件可在 OnConnectEvent 之後,但在 OnDisconnectEvent之前隨時發生。

分類器事件

順序 分類器事件 描述
1 OnSubmittedMessage 當訊息抵達接收 Exchange 伺服器上傳輸服務的提交佇列時,就會觸發此事件。
2 OnResolvedMessage 在解析所有收件者之後,但在為每個收件者決定下一個躍點之前,就會觸發此事件。 OnResolvedMessage路由事件可讓後續事件使用每個收件者SetRoutingOverride方法覆寫預設路由行為。
3 OnRoutedMessage 在郵件已分類、通訊群組清單已展開,且收件者已解析之後,就會觸發此事件。
4 OnCategorizedMessage 當分類器完成處理訊息時,就會觸發此事件。

傳輸代理程式的優先順序

有兩個因素決定傳輸代理程式在傳輸管線中處理訊息的順序:

  1. 註冊傳輸代理程式的 SMTP 事件,以及該 SMTP 事件遇到訊息時。
  2. 如果有多個代理程式登錄到相同的 SMTP 事件,指派給傳輸代理程式的優先順序值。 最高優先順序為 1。 較高的整數值表示較低的代理程式優先順序。

例如,假設您已設定下列傳輸代理程式:

  • 優先順序為 1 的傳輸代理程式 A 和優先順序為 2 的傳輸代理程式 C 會登錄至 OnEndOfHeaders SMTP 事件。
  • 優先順序為 4 的傳輸代理程式 B 會登錄至 OnMailCommand SMTP 事件。

傳輸代理程式 B 會先套用至訊息,因為 OnMailCommand 事件會在 OnEndOfHeaders 事件之前遇到訊息。 當訊息到達 OnEndOfHeaders 事件時,傳輸代理程式 A 會在傳輸代理程式 C 之前套用,因為傳輸代理程式 A 的優先順序高 (整數值較低) 於傳輸代理程式 C。

內建傳輸代理程式

Exchange Server包含許多內建的傳輸代理程式,可提供反垃圾郵件、傳輸規則和日誌記錄等功能。 傳輸代理程式管理 Cmdlet 不會隱藏 Exchange 信箱伺服器上的大部分內建傳輸代理程式,且無法管理。 幾乎所有可見且可管理的內建傳輸代理程式都位於信箱伺服器和 Edge Transport Server 上的傳輸服務中。

下表說明信箱伺服器上更有趣的內建傳輸代理程式。 請注意,此資料表不包含許多不可見且無法管理的傳輸代理程式。

信箱伺服器上有趣的內建傳輸代理程式

代理程式名稱 管理? Priority (優先順序) 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

Edge Transport Server 上有趣的內建傳輸代理程式

在 Edge 傳輸服務上,大部分的內建傳輸代理程式都可由傳輸代理程式管理 Cmdlet 或其他功能特定的 Cmdlet 來顯示及管理。

下表說明 Edge Transport Server 上更有趣的內建傳輸代理程式。 請注意,此資料表不包含隱藏或無法管理的傳輸代理程式。

代理程式名稱 管理? Priority (優先順序) SMTP 或分類器事件
連線篩選代理程式 1 OnConnectEvent

OnMailCommand

OnRcptCommand

OnEndOfHeaders

地址修正輸入代理程式 2 OnRcptCommand

OnEndOfHeaders

Edge 規則代理程式 3 OnEndOfData
內容篩選代理程式* 4 OnEndOfData
寄件者識別碼代理程式* 5 OnEndOfHeaders
寄件者篩選代理程式* 6 OnMailCommand

OnEndOfHeaders

收件者篩選代理程式 7 OnRcptCommand
通訊協定分析代理程式* 8 OnConnectEvent

OnEndOfHeaders

OnEndOfData

OnReject

OnRsetCommand

OnDisconnectEvent

附件篩選代理程式 9 OnEndOfData
地址修正輸出代理程式 10 OnSubmittedMessage

OnRoutedMessage

* 您也可以在信箱伺服器上安裝和設定這些反垃圾郵件代理程式。 如需詳細資訊,請參閱在信箱伺服器上啟用反垃圾郵件功能

針對傳輸代理程式進行疑難排解

若要協助您針對傳輸代理程式的問題進行疑難排解,您可以使用下列功能:

  • Get-TransportPipeline:此 Cmdlet 會顯示 SMTP 事件,以及在 Exchange 伺服器上遇到訊息的對應傳輸代理程式。 如需詳細資訊,請參閱在 Exchange Server 中檢視傳輸管線中的傳輸代理程式

  • 管線追蹤:管線追蹤會在遇到每個傳輸代理程式之前和之後,建立訊息的確切快照集。 這可讓您尋找造成非預期結果的傳輸代理程式。 如需詳細資訊,請參閱 管線追蹤