Exchange 2007 自定义传输规则

需求:公司域名从aep.com 修改为casoo.com 原域名仍可接收邮件,但是希望发到原域名的邮件 自动回复发送者告知:邮件域名已变更

 

原有的传输规则无法实现上述功能,那就只有自定义了。

首先copy 两个dll到开发服务器上

Microsoft.Exchange.Data.Transport.dll ,Microsoft.Exchange.Data.Common.dll (C:\Program Files\Microsoft\Exchange Server\Public directory) 

你可以编写两种传输规则:SmtpReceiveAgent,RoutingAgent

这里使用 后者 开始编码了,新建一个类库项目

using System;

using System.Collections.Generic;

using System.Text;

using Microsoft.Exchange.Data.Transport;

using Microsoft.Exchange.Data.Transport.Routing;

using System.Diagnostics;



namespace AutoReplayForCustomerDomainRule

{

    public sealed class AutoReplayForCustomerDomainRoutingAgentFactory : RoutingAgentFactory

    {

        public override RoutingAgent CreateAgent(SmtpServer server)

        {

            return new AutoReplayForCustomerDomainRoutingAgent();

        }

    }



    public class AutoReplayForCustomerDomainRoutingAgent : RoutingAgent

    {

        public AutoReplayForCustomerDomainRoutingAgent()

        {

            base.OnSubmittedMessage += new SubmittedMessageEventHandler(AutoReplayForCustomerDomainRoutingAgent_OnSubmittedMessage);

            //base.OnResolvedMessage += new ResolvedMessageEventHandler(AutoReplayForCustomerDomainRoutingAgent_OnResolvedMessage);

        }



        void AutoReplayForCustomerDomainRoutingAgent_OnSubmittedMessage(SubmittedMessageEventSource source, QueuedMessageEventArgs e)

        {

            if (e.MailItem.FromAddress.IsValid)

            {

                string rpdomain = string.Format("{0}@{1}", e.MailItem.FromAddress.LocalPart, e.MailItem.FromAddress.DomainPart);

                bool isNeedReply = false;

                //e.MailItem.Message.Subject += rpdomain;

                //e.MailItem.Message.Subject += "|" + AppConfig.AutoReplyDomain;

                foreach (EnvelopeRecipient ep in e.MailItem.Recipients)

                {

                    if (ep.Address.IsValid && ep.Address.DomainPart.ToLower() ==AppConfig.AutoReplyDomain)

                    {

                        isNeedReply = true;

                        break;

                    }

                }



                if (isNeedReply)

                { 

                    //                  

                    EWSService.Create().SendMail(AppConfig.AutoReplySubject, AppConfig.AutoReplyMessage, new string[] { rpdomain });

                }

                

            }

        }             

      

    }

}

 

部署:

打开Exchange命令行

执行下面的命令:

net stop msexchangetransport # to stop the exchange transport service

install-transportagent -name "autoreply_v1" -assemblypath c:\Transrule\AutoReplayForCustomerDomainRule.dll -transportagentfactory AutoReplayForCustomerDomainRule.AutoReplayForCustomerDomainRoutingAgentFactory
enable-transportagent -identity "autoreply_v1"

get-transportagent -identity "autoreply_v1"

net start msexchangetransport

你可能感兴趣的:(Exchange)