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

C# Exchange路由代理检测电子邮件方向,c#,email,exchange-server,exchange-server-2010,exchange-transport-agents,C#,Email,Exchange Server,Exchange Server 2010,Exchange Transport Agents,我们有一个Exchange Trasport代理,这是一个专门的路由代理。在OnSubmittedMessage事件中,我们需要检查MailItem并确定它是出站还是入站。我目前正在考虑使用SmtpServer.AcceptedDomains属性检查发件人电子邮件是否在接受域列表中。以下是我们如何尝试做到这一点的示例: private bool IsOutbound(MailItem mailItem, AcceptedDomainCollection acceptedDomains) {

我们有一个Exchange Trasport代理,这是一个专门的路由代理。在
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种可能的解决方案:

  • 根据接受域列表检查发件人域
  • 使用通讯簿检查发件人是否为内部发件人
  • 检查InboundDeliveryMethod属性,查看它是否是从邮箱创建的

  • 最后,我们决定,我们真的希望检查仅从邮箱生成的邮件,并使用#3#1听起来可能包含了真正的“转发”域,而我们不想考虑我们的应用程序中的那些消息。

    接受域告诉您Exchange组织将要删除的所有SMTP域。例如,当Exchange传输服务器对邮件执行邮件分类时,如果邮件的地址在接受域内,则它将负责将该邮件传递给该收件人(一封邮件中可以有多个收件人,因此邮件可能会分叉并传递给内部收件人,而发送给外部收件人)

    你所做的只是告诉你发件人来自何处,而不是消息本身的方向。OnSubmittedMessage意味着你在进行任何分类之前捕获了一条消息,如果这条消息是从你的组织内部发送的,但如果该消息同时有内部和外部收件人,则会复制一些副本我有多个目的地

    还有一些其他的选择,我建议你看看

    干杯
    Glen

    AcceptedDomains告诉您Exchange组织将要查找的所有SMTP域。例如,当Exchange传输服务器对邮件执行邮件分类时,如果邮件的地址在接受域内,则它将负责将该邮件传递给该收件人(一封邮件中可以有多个收件人,因此邮件可能会分叉并传递给内部收件人,而发送给外部收件人)

    你所做的只是告诉你发件人来自何处,而不是消息本身的方向。OnSubmittedMessage意味着你在进行任何分类之前捕获了一条消息,如果这条消息是从你的组织内部发送的,但如果该消息同时有内部和外部收件人,则会复制一些副本我有多个目的地

    还有一些其他的选择,我建议你看看

    干杯
    Glen

    我想我现在阅读了您的观点,并不是真的想确定邮件的方向,而是确认电子邮件的发件人是Exchange组织的内部发件人。我们希望我们的代理处理从内部Exchange服务器发送的任何电子邮件。我们最初使用的是您建议的标题在链接“X-MS-Exchange-Organization-MessageDirectionality”中对于这一点,微软建议我们改为尝试接受域,我还不知道为什么。另一个选择是地址簿类,你可以验证发件人eg类型,看看它是否是内部的。如果你为这些信息做了这么多的大量工作,接受域可能是性能最好的还没有遇到AddressBook,对此我有几个问题:1.AcceptedDomains是否最终实现了与AddressBook相同的功能。IsInternal()将得到我?我测试并看到了AddressBook。IsInternal()为我添加到AcceptedDomains的假测试域返回了true。2.什么是AddressBook.IsInternal()这样做会使AcceptedDomains成为一种更快的方法?3.你有关于AddressBook.IsInternal()的文档吗,microsoft站点甚至没有通用的消息,只是空白。再次感谢所有的帮助,我只想选择最好的选项。通讯簿允许您根据目录验证地址,接受域只查看域。这实际上取决于您尝试做什么,环境,以及是否您的所有发件人都在目录、子域等中。MSDN和Transport SDK是唯一的文档源,我可以推荐的最好方法是自己测试它。(例如,可能isInternal不是您要查找的内容。通讯簿可用于确定许多其他内容)也许你会同时使用这两种方法,例如一个很好的例子我想我现在读了你的观点,并不是真的想确定邮件的方向,而是确认电子邮件的发件人是Exchange组织的内部发件人。我们希望我们的代理处理从内部Exchange服务器发送的任何电子邮件。我们最初重新使用您在链接“X-MS-E”中建议的标题