Exchange 2013 用 SmtpReceiveAgent トランスポート エージェントを作成する
Exchange 2013 で使用するカスタム SmtpReceiveAgent トランスポート エージェントを作成する方法について説明します。
製品: Exchange Server 2013
関連するコード スニペットとサンプル アプリ:
SmtpReceiveAgentFactory クラスと SmtpReceiveAgent クラスを使用すると、クライアント アクセス サーバー上のフロント エンド トランスポート サービスまたはメールボックス サーバー上のトランスポート サービスの動作を拡張できます。 これらのクラスを使用して、組織に到着したメッセージに応答するように設計されたトランスポート エージェントを実装できます。
SmtpReceiveAgentFactory クラスと SmtpReceiveAgent クラスには、次の表に示すイベントが含まれています。
表 1. SmtpReceiveAgent クラスのイベント
イベント | 説明 |
---|---|
OnAuthCommand |
どの種類の認証方法が使用されたかによって、メッセージ配信の試行を拒否または承認するエージェントなど、SMTP AUTH コマンドでのみ得られる情報を必要とするエージェントで使用します。 |
OnConnect |
リモート SMTP サーバーのアドレスまたはドメインに基づいてアクションを実行するエージェントなど、フロント エンド トランスポート サービスへの SMTP による接続が開いているときにのみ得られる情報を必要とするエージェントで使用します。 |
OnDataCommand |
このイベントは、SMTP DATA コマンドで得られる情報を必要とするエージェントで使用します。 |
OnDisconnect |
時間の計算を実行するために、切断時に得られる現在の時刻と日付などの情報を必要とするエージェントで使用します。 |
OnEhloCommand |
SMTP EHLO コマンドで得られる情報を必要とするエージェントで使用します。たとえば、EHLO コマンドで得られる ID に基づいて、エージェントによってメッセージを承認または拒否する場合に使用します。 |
OnEndOfAuthentication |
リモート サーバーが認証プロセスを完了したときに得られる情報を必要とするエージェントで使用します。たとえば、リモートの SMTP サーバーやクライアントから得られる認証情報に基づいてメッセージにアクションを実行するエージェントで使用します。 |
OnEndOfData |
メッセージから得られるデータに基づいてアクションを実行する必要のあるエージェントで使用します。 このイベントは、フロント エンド トランスポート サービスでは発生しません。 このイベントをトランスポート エージェントで使用する必要がある場合は、そのエージェントをメールボックス サーバーにインストールする必要があります。 |
OnEndOfHeaders |
送信したメッセージのヘッダーから得られる情報に基づいてアクションを実行する必要のあるエージェントで使用します。 |
カスタム SmtpReceiveAgent トランスポート エージェントの作成
次に示す手順では、カスタムの SmtpReceiveAgent トランスポート エージェントを作成する方法について説明しています。
トランスポート エージェントを作成するには
名前空間に参照を追加します。
using Microsoft.Exchange.Data.Transport; using Microsoft.Exchange.Data.Transport.Smtp; using Microsoft.Exchange.Data.Transport.Email; using Microsoft.Exchange.Data.TextConverters;
これらの名前空間は、Exchange 2013 サーバーにあります。 これらの名前空間への参照を追加すると、 SmtpReceiveAgent メンバーと 、Exchange 2013 で使用される他のクラスへのアクセス権が付与されます。本文変換トランスポート エージェントの構築 サンプル。
SmtpReceiveAgentFactory クラスの派生クラスを実装します。
public class BodyConversionFactory : SmtpReceiveAgentFactory { /// <summary> /// Create a new BodyConversion /// </summary> /// <param name="server">Exchange server</param> /// <returns>A new BodyConversion</returns> public override SmtpReceiveAgent CreateAgent(SmtpServer server) { return new BodyConversion(); } }
このコードでは、派生クラスのインスタンスを作成し、CreateAgent メソッドをオーバーライドして、新しいカスタム エージェントのインスタンスを作成するようにします。
エージェントを定義します。
public class BodyConversion : SmtpReceiveAgent { // Your custom code goes here /// <summary> /// The constructor registers an end of data event handler. /// </summary> public BodyConversion() { Debug.WriteLine("[BodyConversion] Agent constructor"); this.OnEndOfData += new EndOfDataEventHandler(this.OnEndOfDataHandler); } }
独自のエージェント クラスを定義すると、カスタムの機能を追加できるようになります。 この例では、 OnEndOfData イベントがカスタム イベント ハンドラーにリダイレクトされます。