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 主機發出資料結束命令時,就會觸發此事件:
|
** | 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 | 當分類器完成處理訊息時,就會觸發此事件。 |
傳輸代理程式的優先順序
有兩個因素決定傳輸代理程式在傳輸管線中處理訊息的順序:
- 註冊傳輸代理程式的 SMTP 事件,以及該 SMTP 事件遇到訊息時。
- 如果有多個代理程式登錄到相同的 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 中檢視傳輸管線中的傳輸代理程式。
管線追蹤:管線追蹤會在遇到每個傳輸代理程式之前和之後,建立訊息的確切快照集。 這可讓您尋找造成非預期結果的傳輸代理程式。 如需詳細資訊,請參閱 管線追蹤。