Создание агентов транспорта для Exchange 2013

Сведения о создании пользовательских агентов транспорта для Exchange 2013 и требованиях к системе для создания пользовательского агента.

Область применения: Exchange Server 2013 г.

Exchange Server 2013 включает несколько агентов транспорта, которые можно использовать для обработки сообщений. Используя сборки, которые поставляются с Exchange, можно создать собственные настраиваемые агенты для выполнения определенных задач в соответствии с потребностями вашей организации. Например, можно использовать транспортный агент SmtpReceiveAgent для перехвата сообщений, полученных по протоколу SMTP, и обработки сообщения для преобразования формата текста в текст, содержащий предварительно отформатированный текст. Транспортный агент RoutingAgent можно использовать для регистрации сообщений, которые передаются через сервер по маршруту на другой сервер. Вы также можете создавать более сложные функции, использующие несколько типов агентов. Например, для создания антивирусного агента можно реализовать smtpReceiveAgent и агент RoutingAgent. Если в сети есть компонент, который не поддерживает протокол SMTP, можно использовать транспортный агент DeliveryAgent для обработки обмена данными между сервером Exchange Server и внешним компонентом.

В этой статье содержатся сведения о предварительных требованиях и задачах, связанных с созданием собственного агента транспорта. Сведения о создании определенных агентов транспорта см. в разделах Создание транспортного агента RoutingAgent для Exchange 2013, Создание транспортного агента SmtpReceiveAgent для Exchange 2013 и Создание транспортного агента DeliveryAgent для Exchange 2013.

Предварительные требования для создания агента транспорта

Ниже приведены предварительные требования, необходимые для реализации агента транспорта.

  • Компьютер под управлением 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 .

Осторожностью

Если установлено и зарегистрировано несколько агентов транспорта для одного события, будут вызваны все агенты, даже если один агент удаляет всех получателей из почтового элемента. > Чтобы избежать необработанных ошибок или непредсказуемого поведения, агент транспорта должен обрабатывать случаи, когда число получателей на почтовом элементе равно нулю.

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 Server для разработки. В командной консоли Exchange используйте командлет Install-TransportAgent , чтобы установить агент, и командлет Enable-TransportAgent , чтобы включить агент. Сведения об использовании командной консоли Exchange см. в разделе Exchange Server PowerShell (командная консоль Exchange).

Осторожностью

Агенты транспорта имеют полный доступ ко всем сообщениям электронной почты, которые они обнаруживают. Exchange 2013 не ограничивает поведение агента транспорта. Агенты транспорта, которые являются нестабильными или содержат недостатки безопасности, могут повлиять на стабильность и безопасность Exchange 2013. Поэтому следует устанавливать только агенты транспорта, которым вы полностью доверяете и которые были полностью протестированы.

Если для установки агента используется командлет Install-TransportAgent , командная консоль Exchange сохраняет блокировку сборки. Чтобы освободить блокировку сборки, необходимо закрыть экземпляр командной консоли Exchange, который использовался для установки агента. Вы не сможете обновить сборку, пока не отпустите блокировку.

В следующем примере показано, как с помощью командной консоли Exchange установить и включить агент с именем MyAgent с помощью класса, производного от smtpReceiveAgentFactory с именем MyAgents.MyAgentFactory.

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

В этом примере агенту присваивается имя MyCustomAgent на сервере, на котором установлен агент. В следующем примере показано, как включить агент с именем MyCustomAgent.

Enable-TransportAgent -Name "MyCustomAgent"

Чтобы управлять агентом транспорта в транспортной службе переднего плана на сервере клиентского доступа, добавьте в команду следующее значение: -TransportService FrontEnd. Например, чтобы просмотреть агенты транспорта в транспортной службе переднего плана, выполните следующую команду.

Get-TransportAgent -TransportService FrontEnd

Дополнительные сведения об установке, включении и управлении агентом см. в разделе Управление агентами транспорта.

В этом разделе:

См. также