我们目前正在进行概念验证,创建一个源自Microsoft.Exchange.Data.Transport.Routing.RoutingAgent
的传输代理。我们使用OnResolvedMessage
事件将电子邮件重新路由到我们的外部电子邮件服务器(非Exchange服务器)。这一切都很好,我们可以将电子邮件重新路由到外部服务器。但是,如果电子邮件同时包含内部和外部收件人,则电子邮件将被拆分为两个单独的电子邮件,并导致两封电子邮件发送到外部电子邮件服务器。虽然这两封电子邮件包含相同的内容,只有不同的RCPT TO标头,但这会导致外部电子邮件服务器处理两次相同的电子邮件,这对我们的项目来说是不太理想的。
这是我第一次创建传输代理,我正在尝试确定是否需要更改某些Exchange服务器设置以阻止符合此条件的电子邮件被拆分为多个电子邮件?
我们的传输代理的主要目标是允许外部电子邮件服务器处理发往内部收件人的电子邮件,因为它们当前将被放入未处理的内部用户邮箱中。它可能与我们的发送/接收连接器有关,任何关于那些问题的任何问题的指导都将非常感激。如果路由代理不是解决此问题的正确方法,我们对其他可能性持开放态度。
我们的事件处理程序的片段:
private void OnOnResolvedMessage(ResolvedMessageEventSource source, QueuedMessageEventArgs queuedMessageEventArgs)
{
var mailItem = queuedMessageEventArgs.MailItem;
var origSubject = mailItem.Message.Subject;
mailItem.Message.Subject = "RouteAgent: " + origSubject;
foreach (var recipient in mailItem.Recipients)
{
var newRouteDomain = new RoutingDomain("externalSendConnectorAddressSpace.com");
var dest = new RoutingOverride(newRouteDomain, DeliveryQueueDomain.UseOverrideDomain);
source.SetRoutingOverride(recipient, dest);
}
}
答案 0 :(得分:0)
当在传输管道中调用OnResolved Message时,收件人将被解析,并且将在消息上发生分叉,其规则主要在https://technet.microsoft.com/en-us/library/bb430743(v=exchg.150).aspx中解释。 EdgeTransport.exe.config是可以完成传输管道配置的地方,但我不相信您尝试执行的操作有任何配置选项。
如果捕获OnSubmission事件中的消息,则允许您在发生任何分类之前获取消息。此时,您可以或多或少地按照您的意愿执行消息。但是,在分类过程中还有其他一些事情发生,例如内容转换https://technet.microsoft.com/en-us/library/bb232174(v=exchg.150).aspx。
但是,如果电子邮件同时包含内部和外部收件人,则电子邮件将被拆分为两个单独的电子邮件,并导致两封电子邮件发送到外部电子邮件服务器。虽然这两封电子邮件包含相同的内容,只有不同的RCPT TO标头,但这会导致外部电子邮件服务器处理两次相同的电子邮件,这对我们的项目来说是不太理想的。
对于外部服务而言,这不应该是一件大事,因为这应该是处理电子邮件的任何过程中所期望的事情,例如,使用Internet MessageId等对外部服务的关联很容易.IMO你的试图在错误的一端解决问题。
干杯 格伦