Exchange Server 2007传输代理问题

时间:2014-01-03 04:43:37

标签: c# debugging visual-studio-2008 exchange-server-2007 exchange-transport-agents

这是我第一次使用Exchange Server Development。下面是我正在使用的简单传输代理,此代理应该只是更新电子邮件主题,如下面的代码所示。

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)
        {
            e.MailItem.Message.Subject = "This message passed through my agent: " + e.MailItem.Message.Subject;
        }
    }
}

以下是我用来安装代理的Powershell脚本。

Net Stop MSExchangeTransport
Install-TransportAgent -Name MyAgent -AssemblyPath EmailLogger.dll -TransportAgentFactory MyAgents.MyAgentFactory
Enable-TransportAgent -Identity MyAgent
Net Start MSExchangeTransport

使用Exchange命令行管理程序成功安装代理。

现在,当我发送/接收电子邮件时,电子邮件主题不会被修改。电子邮件有其原始主题。我不知道为什么?

我还执行了下面提到的步骤以调试代理,但Visual Studio Debugger没有命中断点。

  

http://www.sf-tools.net/Messaging/tabid/55/EntryId/163/Exchange-2010-Transport-Agent.aspx

     

Debugging MS Exchange 2007 Transport Agent

     

http://omarjames.com/blog/index.php/debugging-exchange-transport-agent/

我的系统配置

我使用的是Microsoft提供的Exchange Server 2007虚拟机,来自下面的链接

http://www.microsoft.com/en-pk/download/details.aspx?id=14901

我还在VM上安装了Visual Studio 2008以进行调试。

请帮我解决问题?

1 个答案:

答案 0 :(得分:2)

解决了问题。 :)

我必须使用路由代理而不是SmtpReceive代理,因为只有路由代理才能保证看到所有通过Exchange Server的电子邮件。

以下是修改后的工作代码,其他所有内容保持不变

using System;
using System.Collections.Generic;
using System.Text;

using Microsoft.Exchange.Data.Transport;
using Microsoft.Exchange.Data.Transport.Routing;



namespace MyAgents
{
    public sealed class MyAgentFactory : RoutingAgentFactory
    {
        public override RoutingAgent CreateAgent(SmtpServer server)
        {
            return new MyAgent();
        }
    }
    public class MyAgent : RoutingAgent
    {
        public MyAgent()
        {
            this.OnSubmittedMessage += new SubmittedMessageEventHandler(this.MySubmittedMessageHandler);            
        }

        public void MySubmittedMessageHandler(SubmittedMessageEventSource source, QueuedMessageEventArgs e)
        {
            e.MailItem.Message.Subject = "This message passed through my agent: " + e.MailItem.Message.Subject;
        }
    }
}