Sink2EML

Achtung
Diese Skript ist in Standardeinstellung ein "/DEV/NULL" Sink, d.h. Jede Mail wird einfach abgespeichert und nicht weiter zugestellt !. Sie müssen das VBScript mit einem Editor im Quellcode an ihre Anforderungen anpassen.

Dieses Beispielskript hat einzig und allein die Funktion, jede Mails, die an einen Windows SMTP-Server gesendet wird, als EML-Datei wegzuschreiben und dann ohne NDR zu löschen. Der Einsatzzweck kann sehr umfangreich sein.

  • SMTP-DevNull
    Über den Weg dieses Skripts produzieren Sie eigentlich einen "Mülleimer". Wird der Code auskommentiert, welcher die Mail als EML-Datei speichert, dann wird aus dem SMTP-Server einfach ein schwarzes Loch, welches jede Mail sofort entfernt.
    SINK2devNull
    Ideal wenn Sie z.B. Testmails irgendwo terminieren wollen.
  • Abzweig zum Archiv oder Analyse
    Sie können natürlich den Code auch so abändern, dass er die Mail ohne Veränderung weiter verarbeitet und nur eine "Kopie" als EML-Datei in einem Verzeichnis ablegt. Eine Weiterverarbeitung in ein Archiv o.ä. wäre damit natürlich möglich.
    Snk2Archiv
    In diesem Fall müssen Sie das Skript so abändern, dass die Message am Ende nicht verworfen wird.

Diese Betriebsart kann auch gut dazu genutzt werden, um z.B.: Mails aus dem Internet von bestimmten Absendern als Kopie in der urform zu erhalten. Dies ist für einige Fehlersuchszenarien sehr nützlich, z.B.: wenn Mails angeblich irgendwo verschwinden. Dann können Sie solche eine Mail immer wieder senden. Beachten Sie dabei aber Duplicate Message-ID

  • Basis für Weiterverarbeitung
    Sie können auch die Funktion wie aktuell gegeben nutzen, um jede Mail die über diesen Server übertragen werden soll, in ein Verzeichnis ihrer Wahl abzulegen und über andere Weg weiter zu verarbeiten und dann weiter zu senden. Nur sollten Sie nicht diesen virtuellen SMTP-Server nutzen, da z.B. ein Verschieben in das "Pickup"-Verzeichnis die Mail sofort wieder rausholen würde. Beachten Sie, dass Sie bei einer Weiterverarbeitung auf jeden Fall die Felder des Envelope zur weiteren Adressierung  verwenden. Die Informationen in der To:- und From:-Zeile der Mail sind nicht die eigentlichen Empfänger der original Mail.
    Sink2Process
    Dies entspricht der ersten Betriebsart. Sie müssen aber zusätzlichen Code schreiben, um die Nachrichten zu verarbeiten und wieder über das Pickup-Verzeichnis in den Versand zu geben.

Der Einsatz dieses Skripts ist daher universell aber auch gefährlich. Gefährlich ist daher, da damit jede Mail an diesen Server der Nachrichtenübertragung entzogen wird. Eine Installation auf dem produktiven Server ist daher nicht ratsam. Wenn Sie hingegen nur eine einzelne Domäne abzweigen möchten, dann sollten Sie im virtuellen SMTP-Server eher eine Domäne einzutragen, um alle Mails an diese Domäne in ein Verzeichnis abzulegen. Diese Konfiguration ist aber nicht mehr möglich, wenn Exchange 2000/2003 auf dem Server installiert ist.

Beachten Sie, dass ein SMTP-EventSink nur "seriell" ablaufen. Das Skript wird bei der Musterinstallation für JEDE Mail gestartet und sollte sich daher mit einer Mail nur sehr "kurz" aufhalten, da es keine parallele Verarbeitung mehrerer Mails gibt. Ein LDAP,DNS oder Datenbank-Lookup, der 10 Sekunden dauert bedeutet, dass der Mailserver nur 6 Mails/Minute oder nur 360 Mails/Stunde verarbeiten kann. Das ist lächerlich wenig.

Das Skript

Ehe Sie nun das Skript herunter laden sollten Sie verstanden haben, dass das Skript nur als Muster zu verstehen ist. Es gibt keine grafische Installationsanleitung, kein Handbuch und ich kann ihnen auch außerhalb eines regulären Dienstleistungsauftrags keine Unterstützung anbieten. Das Skript ist für Demonstrations- und Schulungszwecke vorgesehen und sicher nicht geeignet, um tausende von Nachrichten in kurzer Zeit zu verarbeiten. Dazu eignet sich der "OnArrival"-Sink mit der umwandlung in CDO-Objekte nicht.

Aber Sie können mit wenig VBScript Kenntnisse auf einem beliebigen Windows SMTP-Server experimentieren, wie Nachrichten auf dem Weg zum Empfänger verändert werden können.

Lesen und verstehen Sie dazu unbedingt die Anleitungen auf SMTP-EventSink.

sink2eml.1.0.zip

Die voreingestellte Betriebsart legt alle Nachrichten als EML-Dateien in einem Verzeichnis ab und verarbeitet Nachrichten, die über das Pickup-Verzeichnis eingeliefert werden, nicht weiter. Sie können daher sehr einfach die Mails so aus dem Mailfluss herausholen und mit einem anderen Programm (was sie natürlich selbst schreiben müssten) wieder über Pickup in das System einstellen.

Performance

An mehreren Stellen habe ich mittlerweile geschrieben, dass so ein "OnArrivalSink" nicht wirklich schnell ist und man daher die Skalierbarkeit und Systembelastung im Auge behalten muss. Natürlich können meine einfachen Tests keine produktive Installation darstellen. Aber Sie können ja gerne die gleichen Tests durchführen.

Ich habe zwar schon einige Tests bezüglich Performance gemacht aber die sind nicht aussagekräftig da diese nur in einer VM auf meinem Notebook erfolgt sind. Ich werde Testergebnisse bei Gelegenheit nachreichen

Man kann deutlich sehen, dass sowohl die Anzahl der Mails aber auch die Größe kritisch ist. Dass der Test noch nicht aussagekräftig ist, können Sie an den Fehlern erkennen. Beim Versand mit Multimail sind nicht als Mails angekommen, wobei dies auch an MultiMail liegen kann. Beim Versand mit BLAT hingegen kommen alle Mails an aber jede einzelne Mail bedeutet den Start von BLAT und das einlesen der Anlage. der PC hat also ein vielfaches an I/Os. Ich werde hoffentlich bald meinen Eicarsender derart erweitert haben, dass ich damit müssenmails versenden kann

Mittels Filemon (Sysinternals) kann man auch die Arbeit des SMTP-Servers genau betrachten. Die eingehenden Mails werden zu erst im QUEUE-Verzeichnis abgelegt um dann nach C:\WINDOWS\TEMP kopiert zu werden (Vermutlich die CDO-Konvertierung) um dann über den Sink als EML-Datei letztlich im Archivverzeichnis zu landen. Das kostet sehr viel Performance und Disk-I/O. Leider kann der Windows SMTP-Server eben nicht alle Mails in ein Verzeichnis ablegen. Um solche eine Funktion mit Performance zu erreichen, sollte man vermutlich eigenen eigenen SMTP-Server bauen, der direkt die Mails annimmt und verarbeitet und nicht über den "OnArrivalSink" gehen. 

Weitere Links