Агент маршрутизации Exchange определяет направление электронной почты

У нас есть агент 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 возможных решения:

  1. Проверьте домен отправителя по списку обслуживаемых доменов.
  2. Используйте адресную книгу, чтобы проверить, является ли отправитель внутренним
  3. Проверьте свойство InboundDeliveryMethod и убедитесь, что оно было создано из почтового ящика.

В конце концов мы решили, что действительно хотим проверять сообщения, созданные только из почтового ящика, и выбрали вариант №3. № 1 звучал так, как будто он потенциально может включать домены, которые на самом деле были просто «пересылающими» доменами, и мы не хотим рассматривать эти сообщения в нашем приложении.


person cjablonski76    schedule 27.04.2016    source источник


Ответы (1)


AcceptedDomains сообщает вам обо всех SMTP-доменах, которые организация Exchange будет искать. Например, когда транспортный сервер Exchange выполняет категоризацию сообщения в сообщении, если сообщение относится к адресу, находящемуся в обслуживаемых доменах, он берет на себя ответственность за доставку этого сообщения этим получателям (в сообщении может быть несколько получателей, чтобы указать сообщение). может быть разветвлен и доставлен внутреннему получателю и отправлен внешнему получателю).

То, что вы делаете, просто говорит вам, откуда отправитель, а не направление сообщения как такового. OnSubmittedMessage означает, что вы захватываете сообщение до того, как будет произведена какая-либо категоризация, в случае, если это сообщение было отправлено из вашей организации, но если у сообщения есть как внутренние, так и внешние получатели, некоторые копии будут иметь несколько мест назначения.

Также есть некоторые другие параметры в https://social.msdn.microsoft.com/Forums/en-US/9387e62a-76d7-4340-b9cc-f87ffcfab8b1/how-to-detect-the-message-source.-in-exchange-server-2013-transport-agent-for-get-the-sending?forum=exchangesvrdevelopment на который я бы посоветовал вам взглянуть

Ура Глен

person Glen Scales    schedule 28.04.2016
comment
Я предполагаю, что на самом деле я не пытаюсь определить направление сообщения теперь, когда я прочитал ваши пункты, скорее, мы подтверждаем, что отправитель электронной почты является внутренним для организации Exchange. Мы хотим, чтобы наш агент обрабатывал любые электронные письма, отправляемые с внутреннего сервера Exchange. Первоначально мы использовали заголовок, который вы предложили в ссылке, X-MS-Exchange-Organization-MessageDirectionality, для этого, но Microsoft в конечном итоге предложила вместо этого попробовать обслуживаемые домены, и у меня пока нет никаких подробностей о том, почему от них. - person cjablonski76; 28.04.2016
comment
Другой альтернативой может быть класс адресной книги msdn.microsoft.com/en-us/library/ вы можете проверить тип отправителя, например, и посмотреть, является ли он внутренним. AcceptedDomains, возможно, лучше всего работает, если вы работаете с большими объемами. - person Glen Scales; 29.04.2016
comment
Большое спасибо за эту информацию, я еще не сталкивался с AddressBook, у меня есть пара вопросов: 1. Достигает ли AcceptedDomains того же, что и AddressBook.IsInternal()? Я проверил и увидел, что AddressBook.IsInternal() возвращает true для поддельного тестового домена, который я добавил в AcceptedDomains. 2. Что делает AddressBook.IsInternal(), чтобы сделать AcceptedDomains более быстрым подходом? - person cjablonski76; 29.04.2016
comment
3. Есть ли у вас какая-либо документация по AddressBook.IsInternal(), на сайте Microsoft даже нет общего сообщения для нее, просто пусто. Еще раз спасибо за всю помощь, я просто хочу выбрать лучший вариант. - person cjablonski76; 29.04.2016
comment
Адресная книга позволяет вам сверить адрес с каталогом, где acceptdomains просто просматривает домен. Это действительно сводится к тому, что вы пытаетесь сделать, к среде, и если все ваши отправители находятся в каталоге, поддоменах и т. д. MSDN и Transport SDK являются единственными источниками документации, лучшее, что я могу порекомендовать, это проверить это самостоятельно. (например, возможно, isInternal не то, что вы ищете, адресную книгу можно использовать для определения ряда других вещей) и, возможно, вы используете оба, например, getcodesamples.com/src/9345163/B476972E хороший пример - person Glen Scales; 30.04.2016