为 Exchange 2013 创建 SmtpReceiveAgent 传输代理

了解如何创建自定义 SmtpReceiveAgent 传输代理以用于 Exchange 2013。

适用于:Exchange Server 2013

相关代码片段和示例应用:

SmtpReceiveAgentFactorySmtpReceiveAgent 类使你能够扩展客户端访问服务器上的前端传输服务或邮箱服务器上的传输服务的行为。 可以使用这些类实现传输代理,这些代理旨在响应传入组织的消息。

SmtpReceiveAgentFactorySmtpReceiveAgent 类包括下表中列出的事件。

表 1. SmtpReceiveAgent 类事件

"事件" 说明
OnAuthCommand
当代理需要仅在 SMTP AUTH 命令中提供的信息时使用,例如接受或拒绝基于所用身份验证方法类型的邮件传递尝试的代理。
OnConnect
当代理需要仅在通过 SMTP 打开到前端传输服务的连接时提供的信息,例如基于远程 SMTP 服务器的地址或域执行操作的代理时使用。
OnDataCommand
当代理需要 SMTP DATA 命令中提供的信息时,请使用此事件。
OnDisconnect
当代理需要断开连接时可用的信息(例如当前日期和时间)时使用,以便执行时间计算。
OnEhloCommand
当代理需要 SMTP EHLO 命令中提供的信息时使用;例如,如果代理根据 EHLO 命令中提供的标识接受或拒绝消息。
OnEndOfAuthentication
当代理需要远程服务器完成身份验证过程后可用的信息时使用;例如,对于基于远程 SMTP 服务器或客户端提供的身份验证信息对邮件执行操作的代理。
OnEndOfData
当代理必须基于消息中可用的数据执行操作时使用。 此事件不会在前端传输服务上触发。 如果传输代理必须使用此事件,则必须将其安装在邮箱服务器上。
OnEndOfHeaders
当代理必须根据提交的邮件标头中提供的信息执行操作时使用。

创建自定义 SmtpReceiveAgent 传输代理

以下过程介绍如何创建自定义 SmtpReceiveAgent 传输代理。

创建传输代理

  1. 添加对命名空间的引用。

       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:生成正文转换传输代理 示例中使用的其他类。

  2. 实现 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 方法以创建新的自定义代理的实例。

  3. 定义代理。

      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 事件重定向到自定义事件处理程序。

另请参阅