Share via


Exchange 2013 のトランスポート エージェントの作成

Exchange 2013 用のカスタム トランスポート エージェントを作成する方法と、カスタム エージェントを作成するためのシステム要件について説明します。

製品: Exchange Server 2013

Exchange Server 2013 には、メッセージの処理に使用できるトランスポート エージェントがいくつか含まれています。 Exchange に付属しているアセンブリを使用すると、自分の組織のニーズに応じた特定のタスクを実行するための、独自のカスタム エージェントを作成できます。 たとえば、SmtpReceiveAgent トランスポート エージェントを使用すると、SMTP プロトコルで受信されるメッセージをインターセプトして、そのメッセージを処理することで、あらかじめ書式設定されているテキストが含まれるように本文の書式を変換できます。 RoutingAgent トランスポート エージェントを使用すると、別のサーバーへのルート上にあるサーバーを通過するメッセージをログに記録できます。 また、さらに複雑な複数のエージェントを使用する機能を作成することもできます。 たとえば、ウイルス対策エージェントを作成する場合は、SmtpReceiveAgent エージェントと RoutingAgent エージェントを実装できます。 ネットワーク上に SMTP プロトコルをサポートしないコンポーネントがある場合は、Exchange サーバーと外部コンポーネントとの間の通信を処理するために、DeliveryAgent トランスポート エージェントを使用できます。

この記事では、独自のトランスポート エージェントを作成するための前提条件と、それに関連するタスクに関する情報を示します。 特定のトランスポート エージェントの作成については、「 Exchange 2013 の RoutingAgent トランスポート エージェントの作成」、Exchange 2013用 SmtpReceiveAgent トランスポート エージェントの作成、および Exchange 2013 の DeliveryAgent トランスポート エージェントの作成に関するページを参照してください。

トランスポート エージェントを作成するための前提条件

トランスポート エージェントを実装するために必要な前提条件を次に示します。

  • クライアント アクセス サーバーまたはエッジ トランスポート サーバーでフロントエンド トランスポート サービスを実行している Exchange 2013 を実行しているコンピューター、またはメールボックス サーバー上のトランスポート サービス。 Exchange 2013 のサーバーロールアーキテクチャの詳細については、「 Exchange 2013 のトランスポート エージェントの概念」を参照してください。

  • トランスポート エージェント クラスの次のアセンブリ:

    • Microsoft.Exchange.Data.dll
    • Microsoft.Exchange.Data.Common.dll
    • Microsoft.Exchange.Transport.dll
  • .NET Framework 4.5

また、Visual Studio 2012 をインストールすることをお勧めします。 トランスポート エージェントは、Visual Basic .NET または C# を使用して実装できます。

アセンブリの参照

Exchange 2013 には、Exchange トランスポート動作の拡張をサポートするクラスのライブラリが用意されています。 これらのクラスには、.NET Framework 4.5 が必要です。 これらのクラスに基づいてトランスポート エージェントを実装するには、Visual Studio 2012 を使用します。

Exchange 2013 インストーラーは、トランスポート エージェントの開発に使用されるアセンブリをインストールし、グローバル アセンブリ キャッシュ (GAC) に登録します。 トランスポート エージェントの実装を開始するには、クラス ライブラリ プロジェクトで Microsoft.Exchange.Data.Transport アセンブリへの参照を作成します。

トランスポート エージェントの実装

次の例は、 SmtpReceiveAgentFactory クラスと SmtpReceiveAgent クラスから派生するクラスの最小限の実装を示しています。

注意

複数のトランスポート エージェントがインストールされ、同じイベントに登録されている場合、1 つのエージェントがメール アイテムからすべての受信者を削除した場合でも、すべてのエージェントが呼び出されます。 > 未処理のエラーや予期しない動作を回避するために、トランスポート エージェントは、メール アイテムの受信者数が 0 に等しいケースを処理する必要があります。

using System;
using System.Collections.Generic;
using System.Text;
using Microsoft.Exchange.Data.Transport;
using Microsoft.Exchange.Data.Transport.Smtp;
namespace MyAgents
{
    public sealed class MyAgentFactory : SmtpReceiveAgentFactory
    {
        public override SmtpReceiveAgent CreateAgent(SmtpServer server)
        {
            return new MyAgent();
        }
    }
    public class MyAgent : SmtpReceiveAgent
    {
        public MyAgent()
        {
            this.OnEndOfData += new EndOfDataEventHandler(MyEndOfDataHandler);
        }
        private void MyEndOfDataHandler (ReceiveMessageEventSource source, EndOfDataEventArgs e)
        {
            // The following line appends text to the subject of the message that caused the event.
            e.MailItem.Message.Subject += " - this text appended by MyAgent";
        }
    }
}
Imports System
Imports System.Collections.Generic
Imports System.Text
Imports Microsoft.Exchange.Data.Transport
Imports Microsoft.Exchange.Data.Transport.Smtp
Namespace MyAgents
    NotInheritable Class MyAgentFactory
        Inherits SmtpReceiveAgentFactory
        Public Overrides Function CreateAgent(ByVal server as SmtpServer) As SmtpReceiveAgent
            Return New MyAgent
        End Function
    End Class
    Public Class MyAgent
        Inherits SmtpReceiveAgent
        Private Sub MyEndOfDataHandler(ByVal source As ReceiveMessageEventSource, ByVal e As EndOfDataEventArgs) Handles Me.OnEndOfData
            ' The following line appends text to the subject of the message that caused the event.
            e.MailItem.Message.Subject &= e.MailItem.Message.Subject + " - this text appended by MyAgent"
        End Sub
    End Class
End Namespace

エージェントのインストールと有効化

エージェントを DLL にコンパイルした後、開発用 Exchange サーバーにエージェントをインストールして有効にする必要があります。 Exchange 管理シェルで、 Install-TransportAgent コマンドレットを使用してエージェントをインストールし、 Enable-TransportAgent コマンドレットを使用してエージェントを有効にします。 Exchange 管理シェルの使用方法については、「Exchange Server PowerShell (Exchange 管理シェル)」を参照してください。

注意

トランスポート エージェントは、受信したすべての電子メール メッセージにフル アクセスできます。 Exchange 2013 では、トランスポート エージェントの動作は制限されません。 不安定なトランスポート エージェント、またはセキュリティ上の欠陥を含むトランスポート エージェントは、Exchange 2013 の安定性とセキュリティに影響を与える可能性があります。 そのため、完全に信頼され、完全にテストされたトランスポート エージェントのみをインストールする必要があります。

Install-TransportAgent コマンドレットを使用してエージェントをインストールすると、Exchange 管理シェルはアセンブリのロックを保持します。 アセンブリのロックを解除するには、エージェントのインストールに使用した Exchange 管理シェルのインスタンスを閉じる必要があります。 ロックを解除するまでアセンブリを更新できません。

次の例では、Exchange 管理シェルを使用して、MyAgents.MyAgentFactory という名前の SmtpReceiveAgentFactory から派生したクラスを使用して、MyAgent という名前のエージェントをインストールして有効にする方法を示します。

Install-TransportAgent -Name "MyCustomAgent" -TransportAgentFactory "MyAgents.MyAgentFactory" -AssemblyPath "C:\myagents\MyAgent.dll"

次の使用例は、エージェントがインストールされているサーバー上のエージェントに MyCustomAgent という名前を付けます。 次の例は、MyCustomAgent という名前のエージェントを有効にする方法を示しています。

Enable-TransportAgent -Name "MyCustomAgent"

クライアント アクセス サーバーのフロントエンド トランスポート サービスでトランスポート エージェントを管理するには、 コマンドに次の値を追加します -TransportService FrontEnd。 たとえば、フロントエンド トランスポート サービスでトランスポート エージェントを表示するには、次のコマンドを実行します。

Get-TransportAgent -TransportService FrontEnd

エージェントのインストール、有効化、管理の詳細については、「 トランスポート エージェントの管理」を参照してください。

このセクションの内容

関連項目