InboxProcessor

Achtung
Dieses VBSkript ist nicht "Cloud-fähig und viele Jahre alt. Ich habe noch keinen "Nachfolger" aber wenn, dann würde der sicherlich in Powershell unter Nutznug der EWS-API entstehen. Zudem kann Exchange 2013 und neuer sehr viele Dinge über Server-Regeln.

VBScript und 64Bit !
Viele 32bit COM-Objekte lassen sich auf einem 64bit System nur instanziieren, wenn die 32bit Version von CSCRIPT/WSCRIPT genutzt wird, welcher unter C:\Windows\SysWOW64\cscript.exe liegt.

E-Mails werden heutzutage nicht nur für die Kommunikation zwischen Menschen genutzt sondern dienen auch zur Übertragung von Systemnachrichten an an andere Prozesse. Auch Exchange kann hierfür genutzt werden, wenn man weiß, wie man an solch einen Posteingang per Skript kommt. Dazu gibt es gleich viele Wege zu Exchange:

  • MAPI/CDO
    Alte klassische aber einfacher Zugriff auf Postfächer
  • WebDav/WebService
    Diese Schnittstelle sollten Sie für zukünftige Projekte bevorzugen.
  • ExOLEDB
    Der Zugriff über diese datenbankähnliche Schnittstelle erfordert, dass das Programm direkt auf dem Exchange Server gestartet wird.
  • StoreSink
    Erlaubt die "sofortige" Verarbeitung eingegangener Mails, aber ist nicht einfach zu entwickeln.
  • POP3/IMAP4
    Gerade in gemischten Umgebungen gibt es auch diese Schnittstellen, um automatisiert ein Postfach zu lesen und zu leeren. Besonders wenn Fremdsysteme (UNIX) Daten abholen müssen, wird POP3 immer noch gerne genutzt, wenn eine direkte Zustellung per SMTP nicht möglich ist.

Der einfachste und zugleich ungefährlichste ist Natürlich ein Programm, welches den Posteingang regelmäßig öffnet, liest und die neuen Mails entsprechend verarbeitet. Die Logik in diesem Skript ist in mehreren anderen Tools der MSXFAQ schon vorhanden, z.B. in End2End-SMTPflow. Da es aber nicht jeder einen bestehenden Code einfach anpassen kann, haben ich hier ein Skript bereit gestellt, welches über Konstanten am Anfang ganz einfach konfiguriert werden kann und ein vorgegebenes Postfach öffnet und die Mails von einem Absender liest und die Anlagen in ein Verzeichnis abspeichert. Das Skript ist sicher verbesserungsfähig. So muss es per Taskplaner immer wieder gestartet werden, da es kein "Dienst" ist und der Zugriff per CDO ist Natürlich nicht zukunftssicher.

Vielleicht schaffe ich es mal zu späterer Zeit dieses Skript in einer .NET-Sprache als Dienst zu schreiben und die neuen Zugriffswege von Exchange (WebDav bzw. WebService) zu nutzen. Aktuell ist es ein einfaches VBScript. Hier schon mal ein par Links:

Oder Sie schauen sich verschiedene Drittprodukte an. Hier eine Auswahl (ohne Bewertung)

Download und Konfiguration

Für den Einsatz sind ein paar Voraussetzungen zu schaffen:

  • AD-Benutzer mit Exchange Postfach
    Sie müssen Natürlich einen aktiven Active Directory Benutzer anlegen, damit Sie das Postfach in Exchange 2000/2003/2007 auch konfigurieren können. Idealerweise nutzen Sie dann diese Anmeldedaten auch zur Ausführung des Skripts.
  • Skript Downloaden

inboxprocessor.1.1.vbs

  • Skript konfigurieren
    Nach dem Download sollten Sie das Skript in einem leeren Verzeichnis ablegen und mit einem Editor die entsprechenden Konfigurationseinstellungen vornehmen. Die entsprechenden Verzeichnisse muss es Natürlich auch geben.
Const STRHOMESERVER     = "srv01"   ' homeserver of the test mailbox
Const STRMAILBOX        = "Administrator"  ' Alias der Mailbox
Const STRSENDER         = "SenderAnzeigename"  ' Filter für FROM-Addresses (Must be Displayname )
Const STRALERTMAIL      = "frank.carius@msxfaq.local"   ' Adresse um im Fehlerfall Alarme zu senden
Const OUTCSVFILENAME    = ".\InboxProcessor.csv"  'Pfad und Name der CSV-Protokolldatei"
Const ATTACHMENTPATH    = ".\"  'Pfad und Name für die abgetrennten Anlagen
  • Skript ausführen lassen
    Zuerst wird man sich Natürlich mit dem Benutzer selbst anmelden und das Skript einfach mal mit CSCRIPT starten und die Funktion prüfen. Das Skript schreibt ausführliche Protokolldateien. Wenn die Funktion gegeben ist, dann sollte man die Protokollierung Natürlich auf das notwendige Minimum reduzieren und z.B. bei Fehlern im Eventlog einen Eintrag hinterlassen, der dann von einem Überwachungsprogramm ausgewertet werden kann
  •  Skript als Hintergrundprozess einbinden.
    Solange das VBScript selbst kein Dienst ist, können Sie dieses per Taskplaner immer wieder starten lassen oder mit Tools wie SRVANY als Dienst starten. Sie müssen dann allerdings im VBScript noch eine Schleife einbauen, dass nach einer Wartezeit das Skript wieder von Vorne startet.

Wichtige Fakten

Auch wenn ein VBScript per CDO einfach in einem Postfach "arbeiten" kann, so sollten Sie folgende Faktoren klären:

  • gleichnamige Anlagen
    Das Skript hat aktuell keine Fehlerbehandlung für gleichnamige Anlagen. Sollte also mehrere Mails mit identischen Anlagen kommen, dann kommt es zu einem Konflikt.
  • fälschungen und Sicherheit
    Das Skript verarbeitet nur Mails von einem bestimmten "Anzeigenamen". Es ist Natürlich möglich, dass jemand eben auch eine Mail an dieses Postfach mit dem gefälschten Absendernamen sendet. Sie sollten sich Gedanken über die Validierung der erhaltenen Informationen machen.
  • Irrläufer
    Das Skript verarbeitet nur Mails von einem bestimmten "Anzeigenamen". Fakt ist aber auch, dass in diesem Postfach sicher irrtümlich Mails landen werden. Spam oder einfach ein Vertippen bei einer Mailadresse etc. kann dies auslösen. Das Skript kann solche Mails einfach löschen. Aktuell ist dieser Teil aus Sicherheitsgründen noch auskommentiert. Bitte aktivieren Sie den Eintrag entsprechend, wenn sicher ist, dass in dem Postfach keine anderen Mails liegen
  • Alarmüberwachung
    Das Skript schreibt Logdateien und optional sogar Eventlog Einträge und Fehlermails. da so ein Skript ja "ohne weitere Überwachung" abläuft, sollte zumindest dieses Feedback ausgewertet werden
  • Funktionsüberwachung
    Das Skript kann aber keinen Alarm schlagen, wenn es nicht läuft. Also sollte eine andere Instanz eben prüfen, ob das Skript sauber gelaufen ist (z.B.: indem es den Start und das saubere Ende anhand einer Eventlog-Meldung prüft.

Weitere Links