androxin
Goto Top

Anzeigename autom. um Suffix ergänzen

Moin, moin.

Ist es möglich den im AD hinterlegten Anzeigenamen ("Vorname Nachname") beim E-Mail Versand automatisch von Exchange erweitern zu lassen? ("Vorname Nachname | Firma")
Ich möchte diese Erweiterung nicht fest im AD verankern, da auch andere Dienste die Zeichenkette nutzen.

Beste Grüße

Content-ID: 260460

Url: https://administrator.de/contentid/260460

Ausgedruckt am: 25.11.2024 um 01:11 Uhr

colinardo
Lösung colinardo 20.01.2015 aktualisiert um 23:02:22 Uhr
Goto Top
Hallo Androxin,
das ist IMHO nur mit einem benutzerdefinierten Transport-Agent realisierbar ohne den Displayname dauerhaft ändern zu müssen. Mit solch einem Agent lässt sich in den Mailverkehr eingreifen bevor die Mail den Server verlässt. Mit Transport-Rules kannst du leider keine Variablen nutzen, bzw. auch keine Kopfzeilen nur ergänzen.

Grüße Uwe
Androxin
Androxin 20.01.2015 aktualisiert um 14:28:45 Uhr
Goto Top
Vielen Dank für die Info.

Gibt es evtl. schon fertige Agents die das übernehmen?
colinardo
Lösung colinardo 20.01.2015 aktualisiert um 23:02:18 Uhr
Goto Top
Zitat von @Androxin:
Gibt es evtl. schon fertige Agents die das übernehmen?
http://www.egress.com/transport-agent/

Hier auch ein Ansatz wie man einen Transport-Agent selber schreiben kann (Programmiererfahrung vorausgesetzt):
Automatische Regel innerhalb eines Öffentlichen Ordners

Grüße Uwe
Androxin
Androxin 20.01.2015 aktualisiert um 15:42:56 Uhr
Goto Top
Vielleicht kann man das ja auch mit dem Simple Display Name lösen und diesen via

Get-remotedomain | set-remotedomain -UseSimpleDisplayName $true

übernehmen.

Ich habe gelesen, dass das Feld nicht mit Sonderzeichen / Umlauten klar kommt. Ist da etwas dran?

Was würde ich mir ggf. zerschießen, wenn ich oben genannten cmdlet ausführe?
Wenn kein SDN hinterlegt ist, versucht Exchange den normalen Displayname zu verwenden oder steht als Absender dann nur die E-Mail Adresse?
Androxin
Androxin 20.01.2015 um 15:52:02 Uhr
Goto Top
Probieren geht über studieren...

Umlaute werden ja gar nicht erst in dem Eingabefeld zugelassen.
Schade
colinardo
Lösung colinardo 20.01.2015, aktualisiert am 21.01.2015 um 11:46:28 Uhr
Goto Top
Falls du an einem Transport-Agent interessiert sein solltest, dieser hier macht das gewünschte (getestet auf einem Exchange 2010).
Den String welcher an den Sendernamen angefügt werden wird aus einer Textdatei namens settings.txt ausgelesen welche in diesem Beispiel im Verzeichnis der DLL liegen muss.
Wie man solche Transport-Agents einbindet kannst du hier nachlesen:
Exchange 2007/2010/2013 Transportagenten
namespace Microsoft.Exchange.SMTPAgents.AppendSendername
{
    using System;
    using System.IO;
    using System.Reflection;
    using System.Text;
    using System.Diagnostics;
    using Microsoft.Exchange.Data.Transport;
    using Microsoft.Exchange.Data.Transport.Routing;

    public sealed class AppendSendernameFactory : RoutingAgentFactory
    {
        
        public override RoutingAgent CreateAgent(SmtpServer server)
        {
            return new AppendSendernameService(server);
        }
    }

    public class AppendSendernameService : RoutingAgent
    {
        public string STRING_TO_APPEND = "";  
        private SmtpServer smtp_server;
        public AppendSendernameService(SmtpServer server)
        {
            try
            {
                smtp_server = server;
                //  Pfad der Einstellungsdatei angeben / per Default liegt diese im selben Verzeichnis wie die Transport-Agent DLL
                string strPathConfig = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location) + @"\settings.txt";  
                if (File.Exists(strPathConfig))
                {
                    STRING_TO_APPEND = System.IO.File.ReadAllLines(strPathConfig,System.Text.Encoding.Default);
                }
            }
            catch (Exception ex)
            {
                LogMessage("AppendSenderNameService(Load String from Config)", String.Format("EXCEPTION: Type={0}, Message='{1}'", ex.GetType().FullName, ex.Message));  
            }
            // Add Queue Event Handler
            this.OnCategorizedMessage += new CategorizedMessageEventHandler(this.onCategorizedMessageHandler);
        }
        //onCategorizedMessageHandler Eventhandler
        public void onCategorizedMessageHandler(CategorizedMessageEventSource source, QueuedMessageEventArgs e)
        {
            
            try
            {
                // append text to sender name if mail is send from local domain
                if (Mail_IsLocalDomain(e.MailItem.FromAddress.DomainPart))
                {
                    e.MailItem.Message.From.DisplayName += " " + STRING_TO_APPEND;  
                }
            }
            catch (Exception ex)
            {
                LogMessage("OnSubmittedMessage", String.Format("EXCEPTION: Type={0}, Message='{1}'", ex.GetType().FullName, ex.Message));  
            }

        }
        public void LogMessage(string methodName, string message)
        {
            try
            {
                StringBuilder traceMessage = new StringBuilder();
                traceMessage.Append(System.DateTime.Now.ToString("s"));  
                traceMessage.Append("|");  
                traceMessage.Append(methodName);
                traceMessage.Append("|");  
                traceMessage.Append(message);
                traceMessage.Append("\r\n");  

                Trace.WriteLine(traceMessage.ToString());
            }
            catch
            {
                throw;
            }
        }
        //Check if mail is in local accepted domains
        private bool Mail_IsLocalDomain(string domainPart)
        {
            bool isLocal = false;
            try
            {
                if (!string.IsNullOrEmpty(domainPart))
                {
                    AcceptedDomainCollection adc = this.smtp_server.AcceptedDomains;
                    foreach (AcceptedDomain ad in adc)
                    {
                        if (domainPart.Equals(ad.NameSpecification, StringComparison.CurrentCultureIgnoreCase))
                        {
                            isLocal = true;
                            break;
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                LogMessage("GetMailLocal", String.Format("EXCEPTION: Type={0}, Message='{1}'", ex.GetType().FullName, ex.Message));  
            }
            return isLocal;
        }

    }
}
Grüße Uwe
Androxin
Androxin 20.01.2015 um 20:35:12 Uhr
Goto Top
Ich bin überwältigt. Damit hätte ich nun nicht gerechnet.

Vielen Dank!
colinardo
Lösung colinardo 20.01.2015 aktualisiert um 23:02:11 Uhr
Goto Top
So damit das hier komplett ist, habe ich noch ein Paket mit kompilierter DLL und Installationsroutine geschnürt:
Das Paket ist für einen Exchange 2010. Anpassung für Exchange 2013 auf Anfrage.
Transport-Agent für Exchange 2010 (zip 5kb)

Der Agent ließt den String aus einer Konfigurationsdatei aus in der man den String nach Bedarf Live anpassen kann.
Weitere Info im ZIP-File.

Viel Spaß
Grüße Uwe
Androxin
Androxin 20.01.2015 um 23:02:08 Uhr
Goto Top
Das ist ja der Oberhammer.

Funktioniert auf Anhieb!
Ich bin begeistert! Vielen Dank
Androxin
Androxin 21.01.2015 um 10:40:26 Uhr
Goto Top
Doch noch nicht so ganz geil. face-sad

Diese Erweiterung wird leider auch bei von extern eingehenden E-Mails angehängt.
colinardo
colinardo 21.01.2015 aktualisiert um 11:48:09 Uhr
Goto Top
Zitat von @Androxin:

Doch noch nicht so ganz geil. face-sad
Diese Erweiterung wird leider auch bei von extern eingehenden E-Mails angehängt.
Fehler ist korrigiert. Es werden jetzt nur Mails ergänzt deren Absenderadresse im Domain-Part eine der AcceptedDomains beinhalten.

Grüße Uwe
Androxin
Androxin 21.01.2015 um 13:50:30 Uhr
Goto Top
Vielen Dank schon einmal.

Leider funktioniert das noch nicht so recht. Es verhält sich noch exakt so wie bei deiner ersten Version.
colinardo
colinardo 21.01.2015 aktualisiert um 13:53:27 Uhr
Goto Top
Zitat von @Androxin:
Leider funktioniert das noch nicht so recht. Es verhält sich noch exakt so wie bei deiner ersten Version.
Geht hier einwandfrei, wie ich geschrieben habe werden nur Mails ergänzt welche als Absenderadresse im Domainteil eine der AcceptedDomains des Exchange beinhalten.
Vermutlich ist bei dir noch die alte Version im Speicher und du hast den Agent nicht richtig entfernt.
Androxin
Androxin 21.01.2015 um 15:19:49 Uhr
Goto Top
Hm. Mag sein, dass ich etwas falsch gemacht habe. Ausschließen kann ich das nicht.

Allerdings habe ich im Anschluss an die "deinstallation" durch dein PS Skript mit dem cmdlet "get-transportagent" überprüft, ob es auch wirklich weg ist. Und das war es.
Anschließend erfolgte die Installation mittels deines PS Skriptes. Die Version von 11:26 wurde in das korrekte Verzeichnis kopiert und Get-TransportAgent zeigte es auch wieder an.