0

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)); 
    } 
} 

Antwort

0

den Anzeigenamen ändern, wird nicht funktionieren, weil, wenn die Nachricht an den Exchange-Informationsspeicher geliefert wird, wird immer die Adresse E-Mail-Lösung des EX Adresseintrag aus der GAL verwenden zurück. Dies ist beabsichtigt und Sie werden dieses Verhalten nicht ändern. Mein Vorschlag wäre Ihr Agent, dass Sie nur nach der Erweiterung der Nachricht handeln sollten (zB gabel https://msdn.microsoft.com/en-us/library/microsoft.exchange.data.transport.routing.queuedmessageeventsource.fork%28v=exchg.80%29.aspx) und sollten nur auf die Nachrichten reagieren, die an das problematische Ziel weitergeleitet werden.

Verwandte Themen