Exchange Serverのトランスポート エージェント

トランスポート エージェントを使用すると、Exchange サーバーに、Microsoft、サード パーティ ベンダー、または組織によって作成されたカスタム ソフトウェアをインストールできます。 このソフトウェアは、トランスポート パイプラインを経由する電子メール メッセージを処理できます。 Microsoft Exchange Server 2016 または 2019 では、トランスポート パイプラインは次のプロセスで構成されます。

  • メールボックス サーバー上のフロントエンド トランスポート サービス
  • メールボックス サーバー上のトランスポート サービス
  • メールボックス サーバー上のメールボックス トランスポート サービス
  • エッジ トランスポート サーバー上のトランスポート サービス

トランスポート パイプラインの詳細については、「メール フローとトランスポート パイプライン」を参照してください。

Exchange トランスポートは、Microsoft Exchange Server トランスポート エージェント SDK を通じて拡張性を提供します。 Exchange バージョンの SDK を使用すると、サード パーティは次の定義済みのクラスを実装できます。

  • SmtpReceiveAgent
  • RoutingAgent
  • DeliveryAgent

SDK のライブラリに準拠すると、結果のアセンブリが Exchange に登録され、SMTP セッションまたはメッセージ処理の特定の段階でエージェントが読み込まれてイベント ハンドラーが呼び出されます。 これらのステージ (イベント) は、エージェント定義の一部です。 エージェント登録情報は XML 構成ファイルに格納されます。

次の一覧では、Exchange でトランスポート エージェントを使用するための要件について説明します。

  • メールボックス サーバーとエッジ トランスポート サーバー上のトランスポート サービスは、SDK 内のすべての定義済みクラスを完全にサポートします。
  • フロントエンド トランスポート サービスでは、SDK の SmtpReceiveAgent クラスのみがサポートされており、サード パーティのエージェントは OnEndOfData SMTP イベントに対して操作できません。
  • メールボックス トランスポート サービスは SDK をまったくサポートしていないため、メールボックス トランスポート サービスでサード パーティのエージェントを使用することはできません。

トランスポート エージェントの管理

トランスポート エージェント コマンドレットは、トランスポート サービスとフロント エンド トランスポート サービスを区別する必要があります。 トランスポート エージェント管理コマンドレットは、 にある%ExchangeInstallPath%TransportRoles\Shared構成ファイルagents.configを操作します。

詳細については、「Exchange Serverでのトランスポート エージェントの管理」を参照してください。

トランスポート エージェントと SMTP イベント

トランスポート エージェントは、SMTP イベントを使用します。 これらのイベントは、トランスポート パイプラインをメッセージが通過すると発生します。 SMTP イベントによって、トランスポート エージェントは、SMTP の対話中および組織内でのメッセージ ルーティング中の特定の時点でのメッセージに対するアクセス権を与えられます。

SMTP 受信は、メールボックス サーバーのフロント エンド トランスポート サービス、メールボックス サーバーとエッジ トランスポート サーバーのトランスポート サービス、メールボックス サーバーのメールボックス トランスポート配信サービスに存在します。 カテゴライザーは、メールボックス サーバーとエッジ トランスポート サーバーのトランスポート サービスにのみ存在します。 トランスポート サービスとカテゴライザーの詳細については、「Exchange Serverのメール ルーティング」を参照してください。

次の表は、トランスポート パイプラインでメッセージに対するアクセス権を付与する SMTP イベントの一覧です。

SMTP 受信イベント

Sequence SMTP イベント 説明
1 OnConnectEvent このイベントは、リモート SMTP ホストからの最初の接続によって発生します。
2 OnHeloCommand このイベントは、コマンドが HELO リモート SMTP ホストによって発行されたときにトリガーされます。
3 OnEhloCommand このイベントは、コマンドが EHLO リモート SMTP ホストによって発行されたときにトリガーされます。
4 OnStartTlsCommand このイベントは、コマンドが STARTTLS リモート SMTP ホストによって発行されたときにトリガーされます。
5 OnAuthCommand このイベントは、コマンドが AUTH リモート SMTP ホストによって発行されたときにトリガーされます。
6 OnProcessAuthentication このイベントは、リモート SMTP ホストでの認証が処理されるときに発生します。
7 OnEndOfAuthentication このイベントは、リモート SMTP ホストが認証を完了すると発生します。
8 OnXSessionParamsCommand このイベントは、コマンドが XSESSIONPARAMS リモート SMTP ホストによって発行されたときにトリガーされます。
9 OnMailCommand このイベントは、コマンドが MAIL FROM リモート SMTP ホストによって発行されたときにトリガーされます。
10 OnRcptToCommand このイベントは、コマンドが RCPT TO リモート SMTP ホストによって発行されたときにトリガーされます。
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 ホストが送信 SMTP ホストに一時的または永続的な配信状態通知 (DSN、配信不能レポート、NDR、またはバウンス メッセージとも呼ばれます) コードを発行した場合にトリガーされます。
** OnRsetCommand このイベントは、送信 SMTP ホストによってコマンドが発行された場合 RSET にトリガーされます。
15 OnDisconnectEvent このイベントは、受信側または送信側のいずれかの SMTP ホストによって、SMTP 対話の接続が切断されると発生します。 通常、これはコマンドが QUIT リモート SMTP ホストによって発行されるときに発生します。

** これらのイベントは、OnConnectEvent の後、かつ OnDisconnectEvent の前の時点で発生します。

カテゴライザー イベント

Sequence カテゴライザー イベント 説明
1 OnSubmittedMessage このイベントは、メッセージが受信側 Exchange サーバーのトランスポート サービスの申請キューに到着したときにトリガーされます。
2 OnResolvedMessage このイベントは、すべての受信者が解決された後で、各受信者の次ホップが決定される前に発生します。 OnResolvedMessage ルーティング イベントでは、受信者ごとの SetRoutingOverride メソッドを使用して、後続のイベントで既定のルーティング動作を変更することができます。
3 OnRoutedMessage このイベントは、メッセージが分類され、配布リストが展開され、受信者が解決された後で発生します。
4 OnCategorizedMessage このイベントは、カテゴライザーがメッセージの処理を完了すると発生します。

トランスポート エージェントの優先度

トランスポート エージェントがトランスポート パイプライン内のメッセージに対して処理する順序は、次の 2 つの要因によって決まります。

  1. トランスポート エージェントが登録された SMTP イベントと、その SMTP イベントでメッセージが発生するタイミング。
  2. 同一の SMTP イベントに登録された複数のエージェントが存在する場合、トランスポート エージェントに割り当てられた優先度の値。 最も高い優先度は 1 です。 整数値が大きくなると、エージェントの優先度は低くなります。

たとえば、次のようなトランスポート エージェントを構成したとします。

  • 優先度 1 のトランスポート エージェント A と優先度 2 のトランスポート エージェント C が OnEndOfHeaders SMTP イベントに登録されています。
  • 優先度 4 のトランスポート エージェント B が OnMailCommand SMTP イベントに登録されています。

OnMailCommand イベントは OnEndOfHeaders イベントよりも前にメッセージに遭遇するため、トランスポート エージェント B が最初にメッセージに適用されます。 メッセージが OnEndOfHeaders イベントに到達すると、トランスポート エージェント A はトランスポート エージェント C よりも優先度が高い (整数値が小さい) ため、トランスポート エージェント A はトランスポート エージェント C よりも前に適用されます。

組み込みのトランスポート エージェント

Exchange Serverには、スパム対策、トランスポート ルール、ジャーナリングなどの機能を提供する多数の組み込みトランスポート エージェントが含まれています。 Exchange メールボックス サーバーの組み込みトランスポート エージェントのほとんどは、トランスポート エージェントの管理コマンドレットによって表示されず、管理することもできません。 表示および管理可能な組み込みのトランスポート エージェントのほとんどすべてが、メールボックス サーバーとエッジ トランスポート サーバー上のトランスポート サービスにあります。

メールボックス サーバーの組み込みトランスポート エージェントのうち、特に興味深いものを以下の表に示します。 この表には、表示されない管理不能なトランスポート エージェントの多くは含まれていないことに注意してください。

メールボックス サーバー上の興味深い組み込みトランスポート エージェント

エージェント名 管理可能 優先度 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

エッジ トランスポート サーバー上の興味深い組み込みトランスポート エージェント

エッジ トランスポート サーバーでは、ほとんどの組み込みトランスポート エージェントは、トランスポート エージェント管理コマンドレットまたはその他の機能固有のコマンドレットによって表示および管理することができます。

エッジ トランスポート サーバーの組み込みトランスポート エージェントのうち、特に興味深いものを以下の表に示します。 この表には、表示されない管理不能なトランスポート エージェントが含まれていないことに注意してください。

エージェント名 管理可能 優先度 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: このコマンドレットは、SMTP イベントと、Exchange サーバー上でメッセージを検出する対応するトランスポート エージェントを示します。 詳細については、「Exchange Serverのトランスポート パイプラインでトランスポート エージェントを表示する」を参照してください。

  • パイプライン トレース: パイプライン トレースでは、各トランスポート エージェントが検出される前後に、メッセージの正確なスナップショットが作成されます。 この機能により、予期しない結果の原因となるトランスポート エージェントを見つけることができます。 詳細については、「 パイプライン トレース」を参照してください。