为 Exchange 2013 创建传输代理

查找有关如何为 Exchange 2013 创建自定义传输代理的信息,以及创建自定义代理的系统要求。

适用于:Exchange Server 2013

Exchange Server 2013 包括多个可用于处理消息的传输代理。 通过使用 Exchange 附带的程序集,可以创建自己的自定义代理,以根据组织的需要执行特定任务。 例如,可以使用 SmtpReceiveAgent 传输代理来截获通过 SMTP 协议接收的邮件,并处理邮件以将正文格式转换为包含预格式化文本。 可以使用 RoutingAgent 传输代理记录路由时通过服务器传递到另一台服务器的消息。 还可以创建使用多种代理类型的更复杂的功能。 例如,若要创建防病毒代理,可以实现 SmtpReceiveAgent 和 RoutingAgent 代理。 如果网络上的组件不支持 SMTP 协议,则可以使用 DeliveryAgent 传输代理来处理 Exchange 服务器与外部组件之间的通信。

本文提供有关创建自己的传输代理时所涉及的先决条件和任务的信息。 有关创建特定传输代理的信息,请参阅 为 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 程序集的引用。

实现传输代理

以下示例演示从 SmtpReceiveAgentFactorySmtpReceiveAgent 类派生的类的最小实现。

谨慎

如果为同一事件安装并注册了多个传输代理,则将调用所有代理,即使一个代理删除邮件项目中的所有收件人也是如此。 > 为避免未经处理的错误或不可预测的行为,传输代理应处理邮件项目的收件人计数等于零的情况。

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 cmdlet 安装代理,使用 Enable-TransportAgent cmdlet 启用代理。 有关如何使用 Exchange 命令行管理程序的信息,请参阅 Exchange Server PowerShell (Exchange 命令行管理程序)

谨慎

传输代理对其遇到的所有电子邮件都具有完全访问权限。 Exchange 2013 不限制传输代理的行为。 不稳定或包含安全漏洞的传输代理可能会影响 Exchange 2013 的稳定性和安全性。 因此,应仅安装完全信任且已经过全面测试的传输代理。

使用 Install-TransportAgent cmdlet 安装代理时,Exchange 命令行管理程序会锁定程序集。 若要释放程序集上的锁,必须关闭用于安装代理的 Exchange 命令行管理程序实例。 在释放锁之前,将无法更新程序集。

以下示例演示如何使用 Exchange 命令行管理程序通过派生自名为 MyAgents.MyAgentFactory 的类来安装和启用名为 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

有关安装、启用和管理代理的详细信息,请参阅 管理传输代理

本节内容

另请参阅