【问题标题】:Exchange Routing Agent Detect Email DirectionExchange 路由代理检测电子邮件方向
【发布时间】:2016-04-27 21:19:48
【问题描述】:

我们有一个 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;
}

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

--编辑--

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

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

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

  1. 根据接受域列表检查发件人域
  2. 使用地址簿检查发件人是否是内部的
  3. 检查 InboundDeliveryMethod 属性,看看它是否是从邮箱创建的

最后,我们决定我们真的想要检查仅从邮箱生成的消息并使用#3。 #1 听起来可能包含实际上只是“转发”域的域,我们不想在我们的应用程序中考虑这些消息。

【问题讨论】:

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


    【解决方案1】:

    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 中还有一些其他选项,我建议你看看

    干杯 格伦

    【讨论】:

    • 我想我并没有真正尝试确定消息的方向,因为我阅读了您的观点,而是我们确认电子邮件的发件人是 Exchange 组织的内部人员。我们希望我们的代理对从内部 Exchange Server 发送的任何电子邮件进行处理。我们最初使用的是您在链接中建议的标题,“X-MS-Exchange-Organization-MessageDirectionality”,但微软最终建议我们尝试使用接受域,我还没有任何详细信息说明他们的原因.
    • 另一种选择是地址簿类msdn.microsoft.com/en-us/library/… 您可以验证发件人例如类型并查看其内部。如果您的流量很大,AcceptedDomains 可能是表现最好的
    • 非常感谢您提供此信息,我还没有遇到过 AddressBook,对此我有几个问题: 1. AcceptedDomains 是否最终实现了 AddressBook.IsInternal() 会得到的相同结果我?我测试并看到 AddressBook.IsInternal() 对于我添加到 AcceptedDomains 的假测试域返回 true。 2. AddressBook.IsInternal() 做什么可以使 AcceptedDomains 成为更快的方法?
    • 3.你有关于 AddressBook.IsInternal() 的任何文档吗,微软网站甚至没有通用消息,只是空白。再次感谢所有帮助,我只想选择最好的选项。
    • 地址簿允许您根据目录验证地址,accepteddomains 只查看域。这真的取决于您尝试做什么、环境以及是否所有发件人都在目录、子域等中。MSDN 和 Transport SDK 是唯一的文档来源,我可以推荐的最好的事情是自己测试。 (例如,也许 isInternal 不是您要查找的内容,AddressBook 可用于确定许多其他事情)并且您可能同时使用两者,例如 getcodesamples.com/src/9345163/B476972E 一个很好的例子
    猜你喜欢
    • 2016-10-05
    • 2016-11-21
    • 1970-01-01
    • 2011-05-23
    • 1970-01-01
    • 2012-06-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多