我有一个分发列表,其中几乎完全由我组织之外的收件人组成。由于收件人邮件主机之一的问题,他们拒绝所有带有From
来自其网络外部的标头的邮件。因此,如果 user1@company.com 向列表发送消息,user2@company.com 将永远不会收到它。因此,我编写了一个传输代理来将邮件项目的 P1 和 P2 SMTP 和消息信封中的 and 修改为分发列表本身From
。Sender
大多数情况下一切正常。
为了能够知道谁将电子邮件发送到分发列表,我让传输代理将 P2 消息信封的显示名称设置为发件人的真实电子邮件地址。如果我的组织外部的人向列表发送电子邮件,则此方法有效,但如果发件人在我的组织内部,则无效。我已经尝试将它实现为 aRoutingAgent
和 aSmtpReceiveAgent
并且行为是相同的。从我的日志记录中,我可以看到正在为我组织内部的发件人处理邮件。
有谁知道这不符合预期?
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));
}
}