0

我们目前正在通过概念验证来创建一个从Microsoft.Exchange.Data.Transport.Routing.RoutingAgent. 我们使用该OnResolvedMessage事件将电子邮件重新路由到我们的外部电子邮件服务器(非 Exchange 服务器)。这一切都很好,我们可以将电子邮件重新路由到外部服务器。但是,如果一封电子邮件同时包含内部和外部收件人,则该电子邮件将被拆分为两封单独的电子邮件,并导致两封电子邮件发送到外部电子邮件服务器。虽然两封电子邮件包含相同的内容,只是不同的 RCPT TO 标头,但这将导致外部电子邮件服务器两次处理相同的电子邮件,这对于我们的项目来说是不理想的。

这是我第一次创建传输代理,我正在尝试确定是否需要更改交换服务器的某些设置以阻止满足此条件的电子邮件被拆分为多个电子邮件?

我们的传输代理的主要目标是允许外部电子邮件服务器处理发往内部收件人的电子邮件,因为它们目前将未经处理地放入内部用户的邮箱。这可能与我们的发送/接收连接器有关,任何关于这些问题的任何问题的指导将不胜感激。如果路由代理不是此问题的正确解决方案,我们对其他可能性持开放态度。

我们的事件处理程序的片段:

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);
        }
}
4

1 回答 1

0

在传输管道中调用 OnResolved 消息时,收件人将已被解析,并且消息上将发生分叉,其规则主要在https://technet.microsoft.com/en-us/library/bb430743中进行了解释(v=exchg.150).aspx。EdgeTransport.exe.config 是可以完成传输管道配置的地方,但我不相信有任何配置选项可用于您尝试执行的操作。

如果您在 OnSubmission 事件中捕获消息,这将允许您在发生任何分类之前获取消息。到那时,您可以或多或少地对 Message 做您想做的事情。但是,在分类过程中还会发生其他事情,例如内容转换https://technet.microsoft.com/en-us/library/bb232174(v=exchg.150).aspx

但是,如果一封电子邮件同时包含内部和外部收件人,则该电子邮件将被拆分为两封单独的电子邮件,并导致两封电子邮件发送到外部电子邮件服务器。虽然两封电子邮件包含相同的内容,只是不同的 RCPT TO 标头,但这将导致外部电子邮件服务器两次处理相同的电子邮件,这对于我们的项目来说是不理想的。

对于外部服务来说,这应该不是什么大问题,因为这应该是在任何处理电子邮件的过程中都可以预料到的事情,例如外部服务很容易使用 Internet MessageId 等进行关联。IMO 你试图解决问题在错误的一端。

干杯格伦

于 2015-12-15T05:43:07.950 回答