Exchange路由代理检测电子邮件方向

时间:2016-04-27 21:19:48

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

我们有一个Exchange Trasport Agent,特别是RoutingAgent。在OnSubmittedMessage事件中,我们需要检查MailItem并确定它是出站还是入站。我目前正在使用SmtpServer.AcceptedDomains属性来检查发件人电子邮件是否在接受域列表中。以下是我们如何尝试这样做的示例:

private bool IsOutbound(MailItem mailItem, AcceptedDomainCollection acceptedDomains)
{
    if (acceptedDomains.Find(mailItem.FromAddress) != null)
    {
        return true;
    }
    return false;
}

我对Accepted Domains并不是非常熟悉,我想了解这是否是一个可靠的解决方案,可靠地确定电子邮件的方向?此方案还需要适用于Exchange组织设置中包含多个域的公司。请注意,如果有任何不同,我们计划支持Exchange 2010-2016。

- 编辑 -

在获得@GlenScales的帮助后,我意识到我需要稍微更新一下我的问题。

我的目标是确定电子邮件的发件人是否位于Exchange组织内部的域中。这也可以通过确定电子邮件是否在Exchange中生成来实现,我们能够在稍后阶段检查收件人,并查看它是入站还是出站。

话虽如此,我们研究了3种可能的解决方案:

  1. 根据接受域列表
  2. 检查发件人域
  3. 使用AddressBook检查发件人是否为内部
  4. 检查InboundDeliveryMethod属性,看看它是否是从邮箱创建的
  5. 最后,我们确定我们确实想要检查仅从邮箱生成的消息,然后使用#3。 #1听起来可能包含真正只是“转发”域名的域名,我们不想在我们的应用程序中考虑这些消息。

1 个答案:

答案 0 :(得分:0)

AcceptedDomains会告诉您Exchange组织将为其设置的所有SMTP域。例如,当Exchange邮件服务器对邮件进行邮件分类时,如果邮件是接收域中的地址,则它将负责将邮件传递给该收件人(邮件中可以有多个收件人,以便指向邮件也许分叉并交付给内部收件人并发送给外部收件人。)

你做的只是告诉你发件人来自哪里,而不是消息的方向。 OnSubmittedMessage意味着您在进行任何分类之前捕获消息,如果消息是从您的组织内发送的,但如果消息同时具有内部和外部收件人,则它将具有多个目标。

https://social.msdn.microsoft.com/Forums/en-US/9387e62a-76d7-4340-b9cc-f87ffcfab8b1/how-to-detect-the-message-source-in-an-exchange-server-2013-transport-agent-for-getting-the-sending?forum=exchangesvrdevelopment中还有一些其他选项,我建议您查看

干杯 格伦