Агент транспорта Exchange — не удается изменить DisplayName конверта сообщения

У меня есть список рассылки, который почти полностью состоит из получателей за пределами моей организации. Из-за проблем с одним из почтовых хостов получателей они отклоняют все сообщения с заголовком From, которые исходят из-за пределов их сети. Таким образом, если [email protected] отправит сообщение в список, [email protected] никогда его не получит. Таким образом, я написал транспортный агент для изменения From и Sender в P1 и P2 SMTP и конвертах сообщений почтового элемента, чтобы они соответствовали самому списку рассылки. Все работает нормально по большей части.

Чтобы можно было узнать, кто отправил электронное письмо в список рассылки, я задал транспортному агенту отображаемое имя конверта сообщения P2, чтобы оно было реальным адресом электронной почты отправителя. Это работает, если кто-то за пределами моей организации отправляет электронное письмо в список, но не работает, если отправитель находится внутри моей организации. Я пытался реализовать это как RoutingAgent, так и SmtpReceiveAgent, и поведение было таким же. Из моего журнала я вижу, что сообщения обрабатываются для отправителей внутри моей организации.

Кто-нибудь знает, что это не так, как ожидалось?

public void OnEndOfDataHandler(ReceiveMessageEventSource source, EndOfDataEventArgs eodArgs)
{
    MailItem mailItem = eodArgs.MailItem;
    EmailMessage message = mailItem.Message;
    EnvelopeRecipient distributionList = AddressedToDistributionList(mailItem);

    if(distributionList != null)
    {
        mailItem.FromAddress = distributionList.Address;

        if (message.From.DisplayName == message.From.SmtpAddress)
            message.From = new EmailRecipient(message.From.SmtpAddress.Replace("@", " at "), distributionList.Address.GetAddress(true));
        else
            message.From = new EmailRecipient(message.From.DisplayName + " (" + message.From.SmtpAddress.Replace("@", " at ") + ")", distributionList.Address.GetAddress(true));

        if (message.Sender.DisplayName == message.Sender.SmtpAddress)
            message.Sender = new EmailRecipient(message.Sender.SmtpAddress.Replace("@", " at "), distributionList.Address.GetAddress(true));
        else
            message.Sender = new EmailRecipient(message.Sender.DisplayName + " (" + message.Sender.SmtpAddress.Replace("@", " at ") + ")", distributionList.Address.GetAddress(true));
    }
}

person Muh Fugen    schedule 16.12.2017    source источник


Ответы (1)


Изменение отображаемого имени не сработает, потому что при доставке сообщения в Store Exchange всегда будет разрешаться адрес электронной почты, использующий запись адреса EX из глобального списка адресов. Это сделано по дизайну, и вы не сможете изменить это поведение. Я бы посоветовал вашему агенту действовать только после расширения сообщения (например, посмотрите на вилку https://msdn.microsoft.com/en-us/library/microsoft.exchange.data.transport.routing.queuedmessageeventsource.fork%28v=exchg.80%29.aspx ) и должен воздействовать только на те сообщения, которые будут перенаправлены в проблемное место назначения.

person Glen Scales    schedule 21.12.2017