Exchange 2007 - Транспорт

Когда происходит маршрутизация

Перед тем как говорить о том, как работает маршрутизация, попробуем посмотреть когда сообщения маршрутизируются в Exchange 2007, и что происходит перед и после этого. Маршрутизация - это одна из функций компонента под названием Категоризатор (Categorizer), место которого в системе показано на следующем рисунке.

 

Как видно из рисунка (сильно упрощенно), Категоризатор отвечает за всю функциональность транспорта, которая не связана с "физическим" приемом и отправкой сообщений (протоколы) и хранением сообщений в очередях. Сообщения попадают в Категоризатор из Очереди входящих сообщений, которая формируется из сообщений, попавших в систему одним из следующих способов:

  • через SMTP от других Hub Transport, Edge Transport или Exchange 2000/2003 серверов, из Internet или от не-Exchange SMTP-серверов
  • через MAPI от Mailbox серверов, находящихся в том же AD Site, что и локальный Hub Transport сервер
  • сообщения могут быть "подобраны" из Pickup Directory
  • сообщения могут быть созданы и помещены в очередь программно (Агентами)

Пройдя через Категоризатор, сообщения помещаются в соответствующие очереди исходящих сообщений в зависимости от способа, которым осуществляется дальнейшая доставка:

  • SMTP очереди для связи с другими Hub Transport, Edge Transport или Exchange 2000/2003 серверами, Internet или не-Exchange SMTP-серверами
  • MAPI очереди для доставки сообщений в почтовые ящики, расположенные на Mailbox серверах, находящихся в том же AD Site, что и локальный Hub Transport сервер
  • сообщения могут быть сохранены в виде файлов в Drop Directory; этот механизм используется для связи с не-SMTP почтовыми системами. 

Категоризатор состоит из 6 функциональных Стадий, через которые проходят сообщения, и следующий рисунок отображает их последовательность. Никаких промежуточных очередей сообщений между Стадиями нет.

 

 

  • 1 Стадия - Событие OnSubmittedMessage: Все входящие сообщения обрабатываются Агентами, подписанными на событие OnSubmittedMessage. Типичный пример Агентов, работающих на этой стадии, это антивирусные программы.
  • 2 Стадия - Resolver: Здесь происходит поиск адресов получателей и отправителей сообщений в Active Directory, "раскрытие" списков рассылки (DL expansion), проверка ограничений на отправку/прием сообщений и т.д. После этой стадии сообщения обычно содержат финальный список получателей, готовых к маршрутизации.
  • 3 Стадия - Маршрутизация: Здесь принимаются решения, куда и как доставлять сообщения для разных получателей.
  • 4 Стадия - Конвертирование: Здесь происходит конвертирование формата сообщений для внешних получателей (например из S/TNEF в HTML).
  • 5 Стадия – Событие OnRoutedMessage: Возможность для Агентов обработать сообщения, "зная" информацию о маршрутизации всех получателей. Здесь реализуются такие функции как журнализация и Transport Rules.
  • 6 Стадия – Помещение в очереди: Помимо указанной в названии стадии роли, здесь также реализована оптимизация выбранных маршрутов (Delayed Fanout).

Указанная выше информация относится к Hub Transport роли. Edge Transport серверы реализуют подмножество перечисленных функций и не включают прием и отправку сообщений через MAPI и поддержку Drop Directory. Категоризатор в Edge Transport не содержит Стадии 2 (Resolver) и 4 (Конвертирование).

Published Monday, December 11, 2006 6:28 PM by gregour

Comments

 

Victor said:

Здравствуйте Григорий,

по возможности, объясните следующее:

1) Возможна ли работа transport event sink, созданного для Exchange 2000/2003, на Exchange 2007 Hub Transport/Edge Transport? Если да, то как следует регистрировать такой transport event sink? (Похоже, что  smtpreg.vbs от старых версий  Exchange здесь уже не работает.)

2) Как изменить отправителя (поле From:) сообщения с помощью агента, подписанного на события onSubmittedMessage или onRouted Message?  Желателен фрагмент кода на C#.

Заранее благодарен.

С уважением,

Виктор

January 10, 2007 3:41 AM
 

gregour said:

Виктор,

1) Нет, старые event sinks на Exchange 2007 Hub Transport/Edge Transport серверах работать не будут. Необходимо использовать новый "Managed Agents API".

2) Изменить отправителя (как header, так и envelope sender) можно и достаточно легко, но делать это нужно очень осторожно (и только если очень нужно), так как многие решения в области безопасности принимаются на основе этих данных. Например, объекты-получатели в Active Directory (особенно часто это делается для списков рассылки) могут быть сконфигурированы так, чтобы не все могли посылать сообщения этим получателям. Проверка этих ограничений осуществляется на основе From/Sender header, и если его поменять, то результат проверок может быть неверен. Также от этих данных зависят проверки на максимально допустимый размер сообщений и т.д. Envelope sender (тот что передается с командой MAIL FROM) может быть изменен системой при "раскрытии" списков рассылки (DL expansion) и во многих других случаях. Изменение отправителя после маршрутизации (OnRoutedMessage) тоже не выход, так как сообщение может быть направлено на другой сервер перед тем как достичь получателя, и на этом сервере маршрутизация произойдет заново. И даже если сообщение должно быть доставлено в почтовый ящик локальным Hub сервером, оно может быть иногда "перемаршрутизировано заново" автоматически или командой "retry-queue <QID> -resubmit:$true". Но если я Вас так и не отговорил, то вот пример кода (прошу прощения, не тестировал):

       public void OnSubmittedMessageEvent(

           SubmittedMessageEventSource source,

           QueuedMessageEventArgs e)

       {

           // Message header.

           e.MailItem.Message.Sender = new EmailRecipient("John Doe", "John.Doe@corp.com");

           // Envelope sender.

           e.MailItem.FromAddress = new RoutingAddress("John.Doe@corp.com");

       }

January 10, 2007 11:45 PM
 

Victor said:

Григорий,

спасибо за Ваши комментарии.

Еще один вопрос - я знаю, что приоритет EXOLEDB снижен в Exchange 2007. Тем не менее, это технология поддерживается.  Как следует регистрировать обработчик store event (такого как onSave, например) для определенного почтового ящика?  В Exchange 2000/2003 можно было использовать следующие URL для event registration item:

http://exchangeserver.domain.com/exchange/johndoe/inbox/eventhandler.reg

и

file://./backofficestorage/domain.com/mbx/johndoe/inbox/eventhandler.reg

А как строить эти URL для Exchange 2007 ?

Спасибо заранее,

Виктор

February 19, 2007 4:32 AM
 

gregour said:

Виктор, к сожалению я не специалист по Store и не смогу ответить на этот вопрос. Попробуйте задать его на Exchange форумах в TechNet.

February 22, 2007 5:07 PM
Anonymous comments are disabled

This Blog

Syndication

Tags

No tags have been created or used yet.

News

Информация на данном сайте предоставляется "КАК ЕСТЬ" без каких-либо гарантий и передачи прав. Мнения, высказанные здесь, являются отражением моего личного взгляда, а не позиции работодателя.

© 2009 Microsoft Corporation. All rights reserved. Terms of Use  |  Trademarks  |  Privacy Statement
Microsoft
Page view tracker