Transportregeln

Der Name wird mittelfristig im englischen auf "Mail Flow Rules" geändert.
Mail flow rule actions https://technet.microsoft.com/en-us/library/jj919237(v=exchg.150).aspx 

Seit Exchange 2007 wird jede Mail durch die Hub/Transport-Rolle geroutet und erstmals hat Microsoft auch hier eine einfache Möglichkeit geschaffen, Regeln einzurichten, die auf jede Mail angewendet wird. Die Regeln wirken auf alle Nachrichten, die übertragen werden und über Filter, Ausnahmen werden die Nachrichten selektiert, auf die dann Aktionen angewendet werden können.

Grundwissen

Ehe wir in genauer auf die einzelnen Kriterien und Aktionen eingehen, sollten Sie ein paar Grundbegriffe der Transportregeln verstehen:

  • Die Regeln sind "global" für die Exchange Organisation
    Es gibt also keine Regeln pro Standort oder für einzelne Server. Die Konfiguration selbst wird im Active Directory (Konfiguration-Partition) abgelegt
    Es kann also abhängig von der AD-Replikation etwas dauern, bis alle Hub/Transport-Rollen die Regeln übernommen haben
  • Bitte nicht mehr als 20.000 Regeln!
    Zugegeben ich wäre nie auf den Gedanken gekommen, so viele Regeln per GUI oder PowerShell anzulegen. Aber es ist zum einen gut zu wissen, dass die Grenze nicht bei 100, 256, 512 oder sonst in greifbarer Entfernung liegt. Und wenn jemand Exchange als Hosting betreibt, kann es schon sein, dass man pro Kunde z.B. einen Disclaimer anbieten möchte. Dann kommen schon ein paar Regeln zusammen
  • Nicht erweiterbar !
    Die Bedingungen und Aktionen sind "Fix". Es gibt keine Möglichkeit die Bedingungen oder Aktionen durch eigene Skripte oder Aktionen einfach zu erweitern. Man kann eine Mail also weder als Datei ablegen noch eigene Programme oder PowerShell-Skripte darauf anwenden. Wer nicht mit den enthaltenen Aktionen auskommt, muss bei Transportagenten weiter lesen.
  • Der erste Transport-Service verarbeitet die Regeln
    Nach der Verarbeitung wird die Mail mit einem internen Header gekennzeichnet, der eine Folgeverarbeitung auf einem anderen Hub/Transport-Server unterbindet. Das ist auch beim Exchange Hybrid wichtig zu wissen, welcher Server welchen Regelsatz auswertet
  • Nur Transport, keine Postfachverarbeitung
    Die Regeln können nur Mails auf dem Transport verändern. Sie können per Transportregel also keine Mail in einen anderen Ordner eines Postfachs ablegen lassen.

Die Konfiguration der Regeln wird von den meisten Administratoren vermutlich über die grafische Administrationskonsole durchführen. Die Regeln erinnern viele vermutlich an Outlook, wenn gleich nicht alle Bedingungen und Aktionen vorhanden sind.

Exchange Hybrid / Exchange Online

Dass der erste Transport-Server die Regeln seiner Umgebung anwendet, hatte ich beim Grundwissen schon gesagt. Das bedeutet aber auch, dass das Flag "Regeln schon verarbeitet" in der Mail auch bei einer Hybrid-Konfiguration in die andere Umgebung weitergegeben wird und damit eine erneute Verarbeitung von Regeln unterbleibt.

Die Regeln in einer lokalen Installation und in Exchange Online sind von der Funktion fast identisch. Es gibt einige Aktionen in Exchange Online, die es nicht On-Premises gibt, z.B. eine Nachricht auf einen bestimmten Connector umzuleiten. Allerdings werden die Regeln beider Umgebungen nicht automatisch synchronisiert.

Sie können die Regeln per PowerShell exportieren und importieren und so diese von On-Premises in die Cloud übertragen.

# Exchange On-Premises PowerShell: Regeln OnPremiese exportieren
$onpremrule = Export-TransportRuleCollection
Set-Content -Path "C:\temp\Rules.xml" -Value $onpremrule.FileData -Encoding Byte
# Exchange Online PowerShell: Regeln in Exchange Online importieren
[Byte[]]$O365 = Get-Content -Path "C:\temp\Rules.xml" -Encoding Byte -ReadCount 0
Import-TransportRuleCollection -FileData $O365

Da es sich dabei aber um ein "Paket" handelt, überschreibt der Import alle bestehenden Regeln. für einen kurzen Zeitpunkt gibt es also erst einmal "keine Regeln" mehr bis der Import diese nacheinander wieder angelegt hat.

Alternativ können Sie die Regeln und andere Einstellungen über die Funktion Hybrid Organization Configuration Transfer (OCT) des HCW - Hybrid Configuration Wizard kopieren lassen

Transportregeln in der EMC

Die Anzeige und Konfiguration von Regeln erfolgt in der EMC auf der Stufe der Organisation bei den Hub Transport-Einstellungen

Sie können hier schon sehen, dass die Regeln eine Reihenfolge (Priorität, 0 = zuerst) und optional einen Kommentar haben und dass Regeln auch deaktiviert werden können.

Bedingungen

Zuerst gilt es, die Bedingung(en) festzulegen, wann die Aktion diese Regel ausgeführt wird. Hierzu sind eine ganze Menge Bedingungen möglich, von denen auch mehrere (oder-verknüpft) angewählt werden können.

Zudem können je Bedingungen manchmal noch Feineinstellungen vorgenommen werden.

Sie erkennen dies an dem Bleistift am Ende. Die Ausformulierung der Regel im Fenster zeigt, dass eine uND-Verknüpfung durchgeführt wird. Wenn Sie eine ODER-Funktion benötigen, dann müssen sie einfach mehrere Regeln mit den Einzelbedingungen konfigurieren.

Bedingungen und RegEx

Einen eigenen Abschnitt widme ich den Bedingungen, die "Regular Expressions" nutzen. Hier gibt es durchaus Überraschungen. Es scheint erst mal alles so einfach zu sein und dennoch habe ich in einer Umgebung einen seltsamen Effekt feststellen müssen.

Dieser Abschnitt beschreibt einen Fehler, den ich in Ex2016 CU14 beobachtet habe. Es kann sein, dass er schon gefixt ist aber sie sollten Regeln sehr genau untersuchen und die Funktion auch verifizieren.

Es ging wieder einmal um das Anfügen eines Disclaimers in Abhängigkeit vom Namen der Firma im Feld "Company". Eigentlich eine ganz einfach Aufgabe, es sei denn im Firmenname ist ein "Punkt" zu finden, z.B. wie bei "Firma GmbH & Co. KG". Entsprechend muss die Bedingung aussehen:

"^Firma GmbH & Co\. KG"

Der "Punkt" ist ja ein Quantifizierer und muss daher mit einem "\" escaped werden. Also habe ich den Wert so eingetragen und OK gesagt. Herausgekommen ist dann aber

"^Firma GmbH & Co\\\. KG"

Irgendwo hat Exchange eine entsprechende Logik um den "Punkt" zu verbessern. Also habe ich mit einer Test-Regel mal einige Schreibweisen versucht

# Wert setzen
set-TransportRule `
    -identity "DisclaimerSample " 
`    -SenderADAttributeMatchesPatterns ‘xxxxxx'

# und wieder lesen
Get-TransportRule 
`    -identity "DisclaimerSample" `
| fl SenderADAttributeMatchesPatterns

Die Ergebnisse waren für Exchange OnPremiese und Exchange Online unterschiedlich:

Testbeschreibung Eingabe Ex2016 CU14 ExchangeOnline

So stelle ich mir den richtigen Ausdruck vor

Company:^Firma GmbH & Co\. KG$
{Company:^Firma GmbH & Co\\\. KG$}
Company:^Firma GmbH & Co\. KG$

Lassen wir mal den Punkt unbehandelt

Company:^Firma GmbH & Co. KG$
{Company:^Firma GmbH & Co\\. KG$}
Company:^Firma GmbH & Co. KG$

Einmal ein anderes Ersatzzeichen

Company:^Firma GmbH & Co\W KG$
{Company:^Firma GmbH & Co\W KG$}
Company:^Firma GmbH & Co\W KG$

Einmal ganz ohne Regex

Company:Firma GmbH & Co. KG
{Company:Firma GmbH & Co\\. KG}
Company:Firma GmbH & Co. KG

Ungültiger Regex ausdruck

Company:Firma GmbH & Co\ KG

Kann nicht gespeichert werden

Company:Firma GmbH & Co\ KG

Es hat den Anschein, dass eine spezielle Logik in Exchange 2016 CU14 den "Punkt" erkennt und glaubt ihn mit einem "\" escapen zu müssen aber dann ein "\\" draus macht und dies temporär nur gelöst werden kann, indem man den "Punkt" umgeht.

Aber auch die anderen Fälle sind alles andere als hilfreich. Exchange 2016 CU14 hat immer ein Problem aber beschwert sich zumindest bei einem falschen RegEx-Ausdruck mit einem Fehler.

Exchange Online hingegen nimmt einfach alles ohne murren hin aber ich bin mir gar nicht sicher, welche Fälle denn dann überhaupt funktionieren können. Ich habe diese Felder erst einmal "gelb" gemacht aber erwarte, dass die Regel auch nicht greifen.

Interessanter Nebeneffekt. Wenn ich die Regeln mit Export/Import von On-Premises in die Cloud übertrage, verschwinden die "\" zeichen

Aktionen

Und dann gilt es zu definieren, welche Aktionen ausgeführt werden. Diese Liste ist etwas kürzer.

Auch hier kann es Aktionen geben, die weitere Einstellungen benötigen

Ausnahmen

Zuletzt können Sie noch Ausnahmen definieren, wann diese Regel dann doch nicht ausgeführt wird. Diese Liste ist etwas umfangreicher.

Auch Ausnahmen bedürfen manchmal weiterer EinstellMöglichkeiten. Allerdings werden die ausgewählten Ausnahmen dann "ODER"-Verknüpft.

Beispiele

Ich möchte zwei einfache Beispiele aufzeigen, die den praktischen Einsatz belegen können. Zum Glück können sie alle Regeln und Einstellungen per GUI machen. Es gibt meines Wissens keine Aktionen, Filter o.ä., die sie nicht auch über die GUI einrichten können. Wenn Sie also nicht hundert ähnliche Regeln in einem Hosting-Umfeld einrichten müssen, dann sollten Sie die GUI nehmen

Beispiel: Disclaimer

Seit 1 Januar 2007 hat unser Gesetzgeber sich einfallen lassen, dass jede Mail einen Hinweis auf den Absender "Legal Disclaimer" enthalten muss. (als wenn die Domain nicht schon hinweis genug wäre) und da Exchange damals dies nicht konnte, gab es eine Menge Zusatzprodukte (Siehe Disclaimer). Exchange 2007 hat aber eine Basisfunktion mitgebracht und Exchange ist noch mal eine ganze Menge besser geworden. Wenngleich auch Microsoft natürlich nicht hexen kann und z.B. das Erkennen wo ein Disclaimer angefügt werden muss oder ob die Mail eine Antwort ist, wo der Disclaimer von früher schon enthalten ist, wird hier auch nicht besser gelöst als bei Wettbewerbern. Es gibt einfach keine 100% Lösung.

Ein Disclaimer ist als Action direkt aufgeführt und wie sie im Bild schon sehen können, kann eine Firma (bitte kein Hoster) per  Filter den Disclaimer nur für "Outside Organization" einrichten. Der Disclaimer selbst ist dann ein HTML-Schnipsel.

Anhängen von Bildern ist nicht möglich. Es kann aber natürlich ein "INLINE"-Bild werden oder ein Link auf ein Bild. Alle drei Varianten haben aber ihre Nachteile. Ich rate jedem immer auf Bilder zu verzichten.

Nur wenn Sie sehr viele Disclaimer anlegen müssen, z.B. Exchange Hosting o.ä., dann lohnt sich ein Blick auf die PowerShell

New-TransportRule `
   -Name ExternalDisclaimer `
   -Enabled $true `
   -SentToScope 'NotInOrganization' `
   -ApplyHtmlDisclaimerLocation 'Append' `
   -ApplyHtmlDisclaimerText "<h3>Titel</h3><p>Dies ist der Text.</p>" `
   -ApplyHtmlDisclaimerFallbackAction Wrap

Denkbar wäre so auch, dass eine Abteilung ihren "eigenen" Disclaimer an einen bestimmten Ort legt und ein Skript diese Änderung erkennt und dann den Disclaimer importiert. Leider kann Exchange selbst nicht eine Textdatei als Vorlage nutzen. Dies ist aber vielleicht auch besser, denn wer denkt schon daran, wie diese Datei auf allen Hub/Transport-Servern erreichbar ist. Und was wäre, wenn diese Datei auf einem UNC-Pfad liegt und der Dateiserver gerade gepatched wird ?

Wenn Sie mögen können sie seit Exchange 2010 auch ausgewählte Active Directory Felder in den Disclaimer einbinden, z.B.

Mit freundlichen Grüßen
%%company%%
%%displayname%%
%%title%%
%%street%%
D-%%zipcode%% %%city%% 
Tel: %%PhoneNumber%%
Fax: %%FaxNumber%%

Beispiel: Rerouting

Ein anderes Beispiel ist das "Rerouting" von Nachrichten. Sicher meine ich damit nicht das umleiten einer Mail an eine Adresse zu einer anderen Adresse. Das geht mit "Kontakten" einfacher. Aber sie können auch Mails mit bestimmten Kriterien, z.B. Größe oder Anlagen abfangen und umleiten. Stellen Sie sich mal vor, sie möchten einfach keine größeren Anlagen in Mails zulassen. Dann könnte eine Transportregel diese Mails an eine andere Adresse umleiten. Dort lauscht ein Dienst, der die Mail auseinander nimmt, die Anlage auf einen Datei oder Sharepoint-Server ablegt und dem Empfänger dann die Mail ohne Anlage aber mit Link auf den neuen Ablageort sendet. Genauso könnte man z.B. eingehende Faxnachrichten oder Sprachnachrichten umbiegen.

Weitere Links