这是我第一次从事Exchange Server开发工作。下面是我正在使用的一个简单的传输代理,这个代理应该简单地更新电子邮件主题,如下代码所示。
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;
}
}
}
下面是我用来安装Agent的Powershell脚本。
Net Stop MSExchangeTransport
Install-TransportAgent -Name MyAgent -AssemblyPath EmailLogger.dll -TransportAgentFactory MyAgents.MyAgentFactory
Enable-TransportAgent -Identity MyAgent
Net Start MSExchangeTransport
使用Exchange命令行管理程序成功安装代理。
现在,当我在交换中发送/接收电子邮件时,电子邮件主题不会被修改。电子邮件有其原始主题。我不知道为什么?
我还执行了以下链接中提到的步骤来调试代理,但Visual Studio调试器没有命中断点。
http://www.sf-tools.net/Messaging/tabid/55/EntryId/163/Exchange-2010-Transport-Agent.aspx
调试MS Exchange 2007传输代理
http://omarjames.com/blog/index.php/debugging-exchange-transport-agent/
我的系统配置
我正在使用微软从下面的链接提供的Exchange Server 2007虚拟机
http://www.microsoft.com/en-pk/download/details.aspx?id=14901
我还在虚拟机上安装了Visual Studio 2008进行调试。
请帮我解决这个问题
问题已解决。:)
我必须使用路由代理而不是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;
}
}
}