【问题标题】:Exchange 2013 Transport Agent Sending Separate Email for Internal Vs External RecipientsExchange 2013 传输代理为内部和外部收件人发送单独的电子邮件
【发布时间】:2015-12-15 13:43:07
【问题描述】:

我们目前正在通过概念验证创建一个派生自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);
        }
}

【问题讨论】:

    标签: c# email exchange-server exchange-server-2013 exchange-transport-agents


    【解决方案1】:

    当 OnResolved Message 在传输管道中被调用时,收件人将被解析,并且消息上将发生分叉,其规则主要在 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 你试图在错误的一端解决问题。

    干杯 格伦

    【讨论】:

    • 有什么办法可以不让发送给内部用户的版本发生内容转换?我们实际上在处理内部用户的电子邮件版本时遇到了问题。虽然您提到的发送多封电子邮件应该是可以的,但如果可能的话,我们需要它们实际上是相同的内容。
    • 内容转换意味着它转换了通常远程域无法理解的 TNEFStream technet.microsoft.com/en-us/library/bb232174(v=exchg.150).aspx。对于内部发送的消息,内容不会被转换,因为它们没有意义。 (如果特定客户请求它,如 POP 或 IMAP,商店将进行即时转换)。作为一个起点,我建议您进行一些跟踪 technet.microsoft.com/en-us/library/bb397226(v=exchg.150).aspx 这将使您了解管道中特定消息发生了什么和没有发生什么
    • 我刚刚意识到我的意思是问是否有办法确保内部收件人的内容被转换,以便与外部收件人的内容相匹配?感谢所有的帮助,到目前为止,我还没有找到任何正确的方法来让内部电子邮件以与外部收件人相同的内容发送到外部服务器。
    • 我没有尝试过,但我建议您查看您用作路由覆盖的域。您应该能够通过将 is 定义为远程域来指定用于该域的内容转换类型。然后,内容转换跟踪应该会告诉您它是否有效
    • 我无法让内部收件人停止以 microsoft 的格式发送出去。我正在考虑暂时操纵内部收件人地址,以便将它们视为外部地址,然后外部电子邮件服务器将知道如何将它们更改回原来的预期收件人地址。您是否看到任何直接原因说明这是一种不可接受的方法?
    猜你喜欢
    • 2015-12-10
    • 1970-01-01
    • 2017-08-07
    • 1970-01-01
    • 1970-01-01
    • 2013-08-10
    • 2021-04-17
    • 1970-01-01
    • 2014-12-13
    相关资源
    最近更新 更多