True IT Stories

Fünf Dinge, die mich beim alle@-Verteiler fast erwischt hätten

Die Idee hinter alle@kunde.de steht in Eine Adresse für alle beim Kunden — und trotzdem kein Spam , die Umsetzung in alle@ in Exchange Online einrichten . Was dort in fünf sauberen Schritten steht, war beim ersten Mal kein sauberer Ablauf. Fünf Dinge hätten mich fast erwischt — zwei davon so, dass der Test wertlos gewesen wäre, ohne dass ich es gemerkt hätte.

1. Moderation als Sicherheitsnetz macht den Test wertlos

Mein erster Gedanke beim Testen: Moderation auf der Gruppe aktivieren. Dann landet keine Mail bei den Mitarbeitern, sondern als Genehmigungsanfrage bei mir — und ich sehe, was durchkommt.

Das Gegenteil war der Fall: Jede Mail landete bei mir, auch die, die die Regel hätte abweisen müssen. Grund laut Trace: Resolver.MT.StartModeration. Moderation greift bei der Empfängerauflösung, vor der Auswertung der Transportregeln — die Nachricht wird angehalten, bevor meine Regel sie sieht.

Mit aktiver Moderation wird die Regel also nie ausgewertet. Man sieht nur, dass die Moderation funktioniert, und könnte daraus schließen, sie greife.

Konsequenz: Moderation nie als Testhilfe für Transportregeln verwenden. Beim Abnehmen prüfen, dass ModerationEnabled auf False steht — sonst ist die Regel im Betrieb genauso wirkungslos wie im Test.

2. Test-Message verschickt echte Mails

Exchange Online hat ein Cmdlet, das genau das tun soll, was man will: Test-Message simuliert eine Nachricht und zeigt, welche Transportregeln greifen würden.

In der Praxis bekam ich einen server side error — und trotzdem tauchte die simulierte Nachricht im Message Trace als echte Zustellung auf. Das Cmdlet hatte sie eingespeist, trotz gemeldetem Fehler. Gegen alle@ getestet, wäre die Mail bei allen Mitarbeitern angekommen.

Konsequenz: Test-Message nicht verwenden. Der zuverlässige Weg steht in alle@ in Exchange Online einrichten : eine identische Regel auf ein Testpostfach legen, echte Mails von einer Fremdadresse und von der eigenen Domain schicken, den Trace lesen.

3. Der Message Trace läuft nach — und das sieht aus wie ein Fehler

Ich schicke die Testmail von Gmail, warte zwei Minuten, rufe Get-MessageTraceV2 auf — nichts. Erster Reflex: am Setup zweifeln. Regel falsch, Gruppe nicht offen, Adresse vertippt?

Nichts davon. Get-MessageTraceV2 läuft fünf bis fünfzehn Minuten hinter dem tatsächlichen Nachrichtenfluss her — nach einer Viertelstunde stand alles da.

Dasselbe gilt für die Regel: Sie braucht bis zu dreißig Minuten, bis sie im Tenant überall aktiv ist. Direkt nach New-TransportRule zu testen heißt, möglicherweise gegen einen Tenant zu testen, der sie noch nicht kennt.

Konsequenz: Nach dem Anlegen der Regel fünf bis zehn Minuten warten, dann testen. Nach dem Testen fünf bis fünfzehn Minuten warten, dann den Trace lesen. In dieser Zeit nichts am Setup ändern.

4. Der NDR kommt beim externen Tester nicht an

Die Mail von Gmail war abgewiesen — der Trace zeigte TRANSPORT.RULES.RejectMessage mit dem Namen meiner Regel. Im Gmail-Postfach lag aber kein Unzustellbarkeitsbericht, und ich habe gesucht, ob der Reject doch nicht sauber war.

Der NDR lag im Spam-Ordner: Automatisch erzeugte Unzustellbarkeitsberichte stufen große Anbieter gern als unerwünscht ein, besonders von einem Tenant ohne Vorkontakt.

Konsequenz: Beweis für eine greifende Regel ist der Trace-Eintrag TRANSPORT.RULES.RejectMessage, nicht der NDR beim Tester. Im echten Betrieb heißt das: Ein externer Absender sieht die Begründung vielleicht nie — die Adresse sollte nach außen also gar nicht erst bekannt sein.

5. Die Domain-Liste wird ersetzt, nicht ergänzt

Dieser Stolperstein lauert nicht beim Einrichten, sondern Monate später: Ein zweiter Dienstleister soll ebenfalls an alle@ schreiben dürfen — man denkt, eine Domain hinzufügen.

Set-TransportRule "Alle-Mitarbeiter: nur intern und dienstleister.de" -ExceptIfSenderDomainIs "partner.de"

Nach diesem Befehl darf partner.de schreiben — dienstleister.de nicht mehr. Der Parameter setzt die Liste neu, er hängt nichts an. Man hat sich selbst ausgesperrt und merkt es erst bei der nächsten Wartungsankündigung mit 550 5.7.1.

Konsequenz: Beim Ändern der Ausnahmen immer alle Domains angeben:

Set-TransportRule "Alle-Mitarbeiter: nur intern und dienstleister.de" -ExceptIfSenderDomainIs "dienstleister.de","partner.de"

Vorher mit Get-TransportRule | Select-Object ExceptIfSenderDomainIs nachsehen, was drinsteht.

Was von der ersten Umsetzung bleibt

Aus diesen fünf Punkten ist das Runbook entstanden, das ich seitdem bei jedem Kunden verwende. Wichtiger als die Reihenfolge der Befehle ist die Reihenfolge des Wartens: Regel anlegen, warten, testen, warten, Trace lesen. Wer diese Pausen einhält und die Finger von Moderation und Test-Message lässt, ist in dreißig Minuten fertig. Beim ersten Mal dauerte es deutlich länger — die meiste Zeit ging dafür drauf, herauszufinden, dass gar nichts kaputt war.

Wie die Idee entstand, steht in Eine Adresse für alle beim Kunden — und trotzdem kein Spam . Wie die Umsetzung aussieht, steht in alle@ in Exchange Online einrichten .