Exchange 2007: PowerShell-Script für beliebige Weiterleitungen

Vorwort

Hin und wieder kommt es vor, dass ein Abieter von eMail-Diensten sich mit der Problemstellung konfrontiert sieht, eMails für Benutzer an ein lokales Postfach und eine oder mehrere (unternehmens-)externe Mailboxen weiterzuleiten, insbesondere, wenn die Mail-Serverlandschaft nicht homogen ist.

Unter Unix-Mailern bereitet eine solche Konfiguration keine Schwierigkeit, die einfachste Variante ist eine „.forward“-Datei im Homedirectory des Anwenders. Unter Exchange allerdings besteht für den Benutzer selbst nur die Möglichkeit, eine Weiterleitungsregel einzurichten, wobei die Lösung besonders bei vielen (heißt 20 000 und mehr) stark frequentierten Mailboxen sehr auf die Serverlast geht.

Zugleich ist es recht schwer für einen Helpdesk, unbedarften Anwendern den Unterschied zwischen „Umleitung“ und „Weiterleitung“ zu erklären und Hilfestellungen für die unterschiedlichen eMail-Clients bereitzuhalten.

Szenario

SzenarioEs sei das links abgebildete Szenario gegeben. Zum einen habe man einen großen Unix-Mailserver, der für „Standard“-Maildienste (POP, IMAP, SMTP) bereitsteht. Benutzer, die Groupware-Funktionen benötigen, werden von einem symmetrisch dazu betriebenen Exchange 2007-System bedient; es soll aber möglich sein, auf beiden Mailservern eine Mailbox zu besitzen und eine oder mehrere weitere externe Postfächer.

Beide Unternehmens-Server werden aus der gleichen Datenquelle mit Benutzerdaten (Namen, eMail-Adressen usw.) provisioniert.

Nun tut sich im Falle von Exchange ein Problem auf. Sofern der Benutzer im Active-Directory eine Mailbox besitzt, wird Exchange interne (d.h. von anderen Exchange-Benutzern versandte) eMails immer in diese Mailbox zustellen, auch wenn der Benutzer eigentlich eine andere Adresse benutzt.

Zwar könnte er eine Weiterleitung über MAPI-Regeln einrichten, hätte dann aber das Problem, dass die „FROM“- und „TO“-Headerzeilen nicht mehr denen der ursprünglichen Mail entsprechen.

Lösung – Theorie

Das Problem betraf einen großen Rechenzentrumsbetreiber in Garching, für den ich die nachfolgende Lösung entwickelt habe. Erschwerend kam noch hinzu, dass für die Konfiguration des Mailsystems eine externe Oberfläche und nicht die nativen (OWA, Outlook) zur Anwendung kommt.

Exchange 2007 bietet die Möglichkeit, eMails für einen Benutzer an ein anderes, eMail-fähiges AD-Objekt (Kontakt oder Verteiler-Gruppe) weiterzuleiten und dabei wahlweise eine Kopie in die lokale Mailbox zuzustellen. Dies ist über die Oberfläche (Exchange Management Shell) und über PowerShell-Scripte konfigurierbar.

Der Unterschied zur MAPI-Weiterleitung ist einfach, dass hier die Headerzeilen erhalten bleiben, da Exchange dann mittels Envelope-Header weiterleitet; der Empfänger sieht nun auch in einer völlig fremden Mailbox noch den ursprünglichen Absender anstatt seine eigene Exchange-Absenderkennung.

Die Lösung besteht nun darin, einfach einen Kontakt für die gewünschte Adresse anzulegen (der Name ist egal, der wird nicht angezeigt im Zielmailsystem) und dem Benutzer diesen Kontakt als Forward-Ziel zu konfigurieren. Nachdem man noch festlegen kann, in welcher OU der Kontakt erstellt wird, behindern diese neuen Objekte auch keine bestehenden Funktionen und tauchen auch nicht in den Adresslisten auf.

Eine Schwierigkeit ergibt sich noch, wenn der Benutzer an mehr als eine Adresse weiterleiten möchte oder wenn ein Kontakt von mehr als einem Benutzer als Weiterleitungsziel verwendet wird. In diesem Falle ist dann zunächst eine Verteilergruppe zu erstellen und diese als Forward-Ziel festzulegen. Danach müssen die einzelnen Kontakte erstellt und der Gruppe hinzugefügt werden.

Lösung – Praxis

Das folgende Script erledigt die Aufgaben; als Parameter sind die Mailboxkennung (z.B. Loginname) und die Ziel-Adressen zu übergeben. Optional kann mit dem dritten Parameter die lokale Kopie aktiviert oder deaktiviert werden. Sofern keine Adressen übergeben wurden, werden die Forwards gelöscht und es findet nur noch eine Zustellung an die lokale Mailbox statt. Anmerkung: Nach dem Löschen von Forwards können unter Umständen Kontakte „verwaist“ zurückbleiben. Wenn diese Objekte stören, könnte man sie über einen Batch-Job noch entfernen.

Bislang keine Kommentare vorhanden.

Einen Kommentar hinterlassen