Ich habe eine Verteilerliste, die aus Empfängern fast ausschließlich außerhalb meiner Organisation besteht. Aufgrund von Problemen mit einem der Empfänger-Mail-Hosts lehnen sie alle Nachrichten mit einem From
Header ab, der von außerhalb ihres Netzwerks stammt. Wenn also [email protected] eine Nachricht an die Liste sendet, wird [email protected] sie niemals empfangen. Als solcher habe ich einen Transportagenten geschrieben, um die From
und Sender
in den P1 und P2 SMTP- und Nachrichtenumschlägen einer Post zu modifizieren, um die der Verteilerliste selbst zu sein. Alles funktioniert in den meisten Fällen gut.Exchange-Transport-Agent - kann DisplayName des Nachrichtenumschlags nicht ändern
Um zu wissen, wer die E-Mail an die Verteilerliste gesendet hat, habe ich den Anzeige-Namen des P2-Nachrichtenumschlags als die tatsächliche E-Mail-Adresse des Absenders festgelegt. Dies funktioniert, wenn jemand außerhalb meiner Organisation eine E-Mail an die Liste sendet, aber nicht, wenn sich der Absender in meiner Organisation befindet. Ich habe versucht, dies sowohl als RoutingAgent
und SmtpReceiveAgent
zu implementieren und das Verhalten ist das gleiche. Von meiner Protokollierung kann ich sehen, dass die Nachrichten für Absender verarbeitet werden, die zu meiner Organisation intern sind.
Weiß jemand, was sich nicht wie erwartet verhält?
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));
}
}