У меня есть список рассылки, который почти полностью состоит из получателей за пределами моей организации. Из-за проблем с одним из почтовых хостов получателей они отклоняют все сообщения с заголовком 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));
}
}