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
- SMTP-EventSink
- Exchange 2000/2003 Event Sinks
- Sink:CatchAll
- CatchUnknown2010
- 324021 HOW TO: Create a "Catchall" Mailbox Sink für Exchange 2000
- 315631 HOW TO: Forward Mail with unresolved Recipients to a Single
Mailbox
Microsoft Lösung mit einem zweiten SMTP-Server, der ungültige Adressen annimmt und umschreibt. - C# Musterlösung als EventSink
http://gsexdev.blogspot.com/2005/05/c-catchall-onarrival-event-sink.html - Catchall Agent auf Codeplex (Exchange 2007)
http://catchallagent.codeplex.com - Mailbasket Lite, Kostenfreie CatchAll Funktion
http://www.avidware.net/Exchange-Catch-all.asp
Es leitet eine Mail an eine Domäne in eine Mailbox um. d.h. eher für Provider geeignet, deren Kunden ihre Domäne per pOP3 aus einer Mailbox per POP3-Sammelaccount (siehe POP3 Varianten) einsammeln - 315631 HOW TO: Forward Mail with unresolved Recipients to a Single Mailbox
- http://hellomate.typepad.com/exchange/2003/08/exchange_catcha.html
- VBScript von Michael B. Smith
http://hellomate.typepad.com/exchange/ExchangeScripts.zip - http://turbogeeks.com/products/mailbasketmd.asp
- Eventsink in VBScript, welcher auch ein AD-Lookup macht
http://www.aloaha.com/software-development/catch-all-mailbox.php