Exchange传输代理 - 无法更改邮件信封的DisplayName

问题描述 投票:0回答:1

我有一个分发列表,由几乎完全在我的组织之外的收件人组成。由于其中一个收件人邮件主机出现问题,他们拒绝所有带有From标头的邮件,该标头来自网络外部。因此,如果[email protected]向列表发送消息,则[email protected]将永远不会收到该消息。因此,我编写了一个传输代理来修改邮件项目的P1和P2 SMTP和邮件信封中的FromSender,使其成为分发列表本身。在大多数情况下,一切都很好。

为了能够知道谁将电子邮件发送到通讯组列表,我让传输代理将P2邮件信封的显示名称设置为发件人的真实电子邮件地址。如果我组织外的某人向列表发送电子邮件,但如果发件人在我的组织内,则不会发生这种情况。我已经尝试将它作为RoutingAgentSmtpReceiveAgent实现,行为是一样的。从我的日志记录中,我可以看到正在为组织内部的发件人处理邮件。

有谁知道这不符合预期的行为?

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));
    }
}
c# email exchange-server distribution-list exchange-server-2016
1个回答
0
投票

更改显示名称将不起作用,因为当邮件传递到Store Exchange时将始终解析电子邮件地址,请使用GAL中的EX地址条目。这是设计使然,您不会改变这种行为。我的建议是你的代理人,你应该只在消息扩展后采取行动(例如,查看fork https://msdn.microsoft.com/en-us/library/microsoft.exchange.data.transport.routing.queuedmessageeventsource.fork%28v=exchg.80%29.aspx),并且只应对那些将被路由到有问题的目的地的消息起作用。

© www.soinside.com 2019 - 2024. All rights reserved.