CatchUnknown

Alle Skripte sind Muster ohne jede Gewährleistung oder Funktionsgarantie. für Schäden bin ich nicht verantwortlich. Achten Sie auf Zeilenumbrüche bei der Übernahme.

Bitte lesen Sie unbedingt auch die Seite Sink:CatchAll, da hier nur das Skript selbst erklärt wird.

Aufgrund der veränderten Struktur von Exchange 2007 kann der hier beschriebene SMTP-Eventsink nicht mit Exchange 2007 eingesetzt werden. Diese Funktion sollte aber durch einen Transportrule erzielt werden können. Allerdings müssen Sie aber auch hier Exchange 2007 so einstellen, dass er erst mal jede Adresse (auch ungültige) annimmt. Siehe dazu die Beschreibung auf CatchUnknown2010

Wenn Sie eine Lösung suchen, um Mails an unbekannte Empfänger an ein Sammelkonto weiter zu leiten, dann kann ihnen folgender SMTP-Transport Eventsink helfen. Das Script ist wieder ein SMTP Transport Eventsink und muss auf dem Exchange SMTP-Server installiert werden, welcher die Mails als erster annimmt.

Funktion

Das Script wird von SMTP-Server für jede empfangen Mail aufgerufen. So hat das Script die Möglichkeit, die Empfängerliste zu erhalten, gegen das Active Directory zu prüfen und gegebenenfalls einfach die Empfänger "umzuschreiben".

Eine einfache Suche im globalen Katalog nach den Mailadressen ist hier realisiert, um ungültige Empfänger zu erkennen und die Zieladresse zu ersetzen.

ACHTUNG: Diese Script startet bei jeder Mail eine ADO-Session was entsprechende Ressourcen und Performance auf dem Exchange Server aber auch auf dem DC. erzeugt, das das Script immer wieder gestartet wird. Objekte können daher nicht erneut benutzt werden.

Voraussetzungen

Damit der EventSink CatchUnknown überhaupt funktioniert, müssen Sie mehrere Randbedingungen sicherstellen:

  • Domäne in den Empfängerrichtlinien
    Stellen Sie über die Empfängerrichtlinien sicher, dass überhaupt Mails für die Domäne angenommen werden,
  • Exchange 2003 Empfängerfilterung abschalten
    Sie müssen natürlich Exchange überhaupt zulassen, dass er aus seiner Sicht "ungültige" Empfänger durchlässt.

    Leider ist dies eine "globale" Einstellung und nicht pro Domäne konfigurierbar. Insofern bedeutet der Einsatz von "CatchUnknown", dass Sie am besten alle entsprechenden Adressen einsammeln, da ansonsten ihr Exchange wieder NDRs versendet  (Siehe auch NDR Spamming)
  • Korrekte CatchUnknown-Adresse
    Sie müssen im Skript natürlich die gewünschte Adresse hinterlegen, an welche die Nachrichten "umadressiert" werden sollen. Achten Sie hierbei unbedingt darauf,  dass ein "SMTP:" davor steht.
  • Korrekte "LOCALDOMAINS"
    Der Eventsink kann auch durch ausgehende Events getriggert werden, d.h. wenn jemand ihren SMTP-Server legitim für ausgehende Nachrichten nutzt. Daher darf das Script nur für Domänen ausgeführt werden, die auch im RUS als "lokal" definiert sind, da sonst alle ausgehende Mails wieder bei der "CatchUnknownAdresse" landen. Um das Skript einfach zu halten, werden diese Daten als Konstanten gepflegt und nicht aus dem RUS ausgelesen. Vergessen Sie nicht das letzte Semikolon am Ende, damit der Code funktioniert.
  • Installation und Registrierung
    Zuletzt müssen Sie das Script auf dem Exchange Server noch registrieren. Dazu müssen Sie einfach den Download nach "C:\CatchUnknown" auspacken. Wenn Sie einen anderen Pfad auswählen, dann müssen Sie in dem Batch "AddCatchUnknown.cmd" den Pfad anpassen

Download und Installation

Laden Sie sich folgendes Archiv herunter und packen Sie es auf dem Exchange Server in ein Verzeichnis ihrer Wahl aus.

catchunknown.1.1.zip
Bitte TXT-Datei nach VBS umbenennen.

  • Editieren sie dann die Datei "CatchUnknown.vbs" um ihre lokalen Domänen und die Mailadresse des Postfachs für ungültige Adressen anzupassen.
  • Zuletzt müssen Sie das Script noch mit "AddCatchUnknown.cmd" registrieren. Kontrollieren Sie in der Datei bitte den Pfad zum Script. Diesen müssen Sie eventuell anpassen.

Sie sollten in einem produktiven System vielleicht bis zur Sicherstellung der Funktion die eingehenden Mails stoppen, so dass Sie mit TELNET (Siehe SMTP-Telnet) oder Outlook Express ein paar Tests machen können.

Achtung:
Die Debugfunktion ist per Default aktiv. Vergessen Sie diese nicht wieder abzuschalten.

Fehlersuche und Debugging

Für einen Eventsink ist es nicht einfach sich mitzuteilen. Es gibt keine Konsole, keine Messagebox, kein Debugger und auch kein Eventlog. Einzug eine Datei kann man relativ problemlos schreiben. Über die Konstanten "LogFile" und "LogLevel" am Anfang des Code können Sie die Debugausgaben aktivieren, die dann wie folgt aussehen. Wenn Sie kein Debugging möchten, dann setzen Sie den LogLevel einfach auf 0

Per Default ist Logging eingeschaltet, so dass Fehler sofort erkannt werden können.  Vergessen Sie aber nicht das Logging danach wieder auszuschalten.

Weitere Links