Транспортный агент Exchange 2013 отправляет отдельную электронную почту для внутренних и внешних получателей
В настоящее время мы проходим проверку концепции создания транспортного агента, основанного на Microsoft.Exchange.Data.Transport.Routing.RoutingAgent
, Мы используем OnResolvedMessage
событие для перенаправления электронной почты на наш внешний почтовый сервер (не сервер Exchange). Все это прекрасно работает, и мы можем перенаправить электронные письма на внешний сервер. Однако, похоже, что если электронное письмо содержит как внутреннего, так и внешнего получателя, электронное письмо будет разделено на два отдельных электронных письма, и в результате два электронных письма будут отправлены на внешний почтовый сервер. В то время как два электронных письма содержат одно и то же содержимое, только разные заголовки RCPT TO, это приведет к тому, что внешний почтовый сервер дважды обработает одно и то же электронное письмо, что является нежелательным для нашего проекта.
Это мой первый раз, когда я создаю агент транспорта, и я пытаюсь определить, есть ли какие-то настройки для сервера Exchange, которые необходимо изменить, чтобы не допустить разбиения писем, соответствующих этим критериям, на несколько писем?
Основная цель нашего транспортного агента будет состоять в том, чтобы разрешить обработку электронных писем, отправляемых внутренним получателям, внешним почтовым сервером, поскольку они в настоящее время будут помещаться в почтовый ящик внутреннего пользователя без обработки. Это может быть связано с нашими соединителями отправки / получения, и любые рекомендации по любым вопросам, касающимся этих вопросов, будут весьма полезны. Если агент маршрутизации не является правильным решением этой проблемы, мы открыты для других возможностей.
Фрагмент нашего обработчика событий:
private void OnOnResolvedMessage(ResolvedMessageEventSource source, QueuedMessageEventArgs queuedMessageEventArgs)
{
var mailItem = queuedMessageEventArgs.MailItem;
var origSubject = mailItem.Message.Subject;
mailItem.Message.Subject = "RouteAgent: " + origSubject;
foreach (var recipient in mailItem.Recipients)
{
var newRouteDomain = new RoutingDomain("externalSendConnectorAddressSpace.com");
var dest = new RoutingOverride(newRouteDomain, DeliveryQueueDomain.UseOverrideDomain);
source.SetRoutingOverride(recipient, dest);
}
}
1 ответ
К тому времени, когда сообщение OnResolved в транспортном конвейере будет вызвано, получатели будут разрешены, и в сообщении произойдет раздвоение, правила которого в основном описаны в https://technet.microsoft.com/en-us/library/bb430743(v=exchg.150).aspx. EdgeTransport.exe.config - это место, где можно выполнить настройку транспортного конвейера, но я не верю, что есть какой-либо вариант конфигурации для того, что вы пытаетесь сделать.
Если вы поймаете сообщение в событии OnSubmission, это позволит вам получить сообщение до того, как произойдет какая-либо категоризация. В этот момент вы можете более или менее делать то, что вы хотите в Послании. Однако есть и другие вещи, которые происходят в процессе категоризации, такие как преобразование контента https://technet.microsoft.com/en-us/library/bb232174(v=exchg.150).aspx.
Однако, похоже, что если электронное письмо содержит как внутреннего, так и внешнего получателя, электронное письмо будет разделено на два отдельных электронных письма, и в результате два электронных письма будут отправлены на внешний почтовый сервер. В то время как два электронных письма содержат одно и то же содержимое, только разные заголовки RCPT TO, это приведет к тому, что внешний почтовый сервер дважды обработает одно и то же электронное письмо, что является нежелательным для нашего проекта.
На самом деле это не должно иметь большого значения для внешней службы, поскольку этого следует ожидать от любого процесса, обрабатывающего электронную почту, например, его легко связать с внешней службой, используя Internet MessageId и т. Д. IMO - ваша попытка решить проблему. на неправильном конце.
Ура Глен