MailMotor
Die eMail ist heutzutage wohl das wichtigste Werkzeug in der Informationsverarbeitung
überhaupt. Aus diesem Grunde gibt es auch entsprechende Clients bis zum Abwinken,
je nach persönlichem Geschmack.
Bei der Entwicklung von automatischen Arbeitsabläufen in der IT kommt man
manchmal in die Verlegenheit eine automatische eMail generieren und versenden
zu müssen, was jedoch mit den meisten "fetten" Clients wie Outlook und Co. entweder
gar nicht oder nur eingeschränkt geht; man denke nur an das Drama mit CDO und
die lästigen Bestätigungsdialoge.
Aus diesem Grunde habe ich MailMotor entwickelt. Dieser Mailer besitzt
keine Oberfläche, sondern er wird über eine INI-Datei oder über Parameter
konfiguriert und gesteuert und ist somit ein idealer Mailer für automatische
Prozesse. Beim Versand einer Mail kann lediglich ein kleines Statusfenster eingeblendet
werden,
dass den Fortschritt des Versands anzeigt.
Standard ist Versand einer eMail an beliebig viele Empfänger bzw. CC- und
BCC-Empfänger. Über den Einsatz von sog. Empfängervariablen ist es jedoch
auch möglich MailMotor anzuweisen, jedem der Empfänger eine
einzelne eMail zu senden, d.h. sind z.B. 5 Empfänger konfiguriert,
verschickt das Programm 5 einzelne eMails mit jeweils einem Empfänger.
Folgende Möglichkeiten bietet der kleine Mailer:
- Angabe des SMTP-Server und des verwendeten -Ports
- Authentifizierung über den SMTP-Server oder über einen POP3-Server
- freie Angabe des Absenders
- Unbegrenzte Anzahl an Empfängern
- Unbegrenzte Anzahl an CC-Empfänger (Carbon Copy)
- Unbegrenzte Anzahl an BCC-Empfängern (Blind Carbon Copy)
- Mailversand als Text oder als HTML
- Übergabe der Nachricht als Datei oder als Text
- Unbegrenzte Anzahl an Anhängen
- Vollständige Protokollierung aller Aktionen, inkl. globalem
Fehlerprotokoll
- Mehrsprachigkeit der Systemmeldungen über Sprachdateien
- Personalisierung des eMail-Textes durch Empfängervariablen
Aufruf
Damit MailMotor die Werte der Konfigurationsdatei auslesen
kann, muss dem Programm über einen Parameter mitgeteilt werden, welche Konfiguration
verwendet werden soll.
Beispielaufruf: mailmotor.exe /ini:sample.ini
Die Angabe der Konfigurationsdatei über den Parameter /ini: kann als kompletter Pfad erfolgen. Netzwerk-Pfade in UNC-Schreibweise
(z.B. \\server\share\datei.ini) werden ebenfalls unterstützt. Wird wie im
Beispiel kein kompletter Pfad angegeben, sucht die Anwendung die übergebene Datei
im Anwendungsordner der mailmotor.exe.
Mit diesem Schema lassen sich so beliebig viele Konfigurationen anlegen und
ausführen.
Weitere Parameter
MailMotor lässt sich statt über eine INI-Datei auch per Übergabeparameter
steuern. Alle Konfigurationseinträge (siehe Abschnitt 'Die
Konfigurationsdatei'), bis auf Empfängervariablen, können
auch als Parameter
verwandt werden. Dieser Ansatz ist jedoch nur zum Teil sinnvoll, da zum korrekten Ablauf
des Programms recht viele Informationen notwendig sind. Fehlt der Parameter
/ini:, so müssen dem Programm alle notwendigen Parameter mitgegeben
werden. Folgenden Parameter sind dabei optional:
port (Standardwert=25)
loginname
loginpassword
pop3authserver
recipientccname und recipientccaddress
recipientbcc
mailtype (Standardwert=TEXT)
messagetype (Standardwert=TEXT)
attachments
Ergänzt man das obenstehende
Aufrufbeispiel z.B. mit /subject:Dies ist ein weiterer Test,
so wird der Eintrag in der Konfigurationsdatei, sofern eine angegeben wurde, ignoriert und der
Wert des Parameters wird zum
Versand der eMail verwendet. Dies bedeutet: In der Rangfolge gewinnen die Parameter
gegen die Einträge der Konfigurationsdatei
Die Konfigurationsdatei
Beispiel:
;=========================================================================================
; Configuration File for MailMotor 1.2
; ----------------------------------------------------------------------------------------
;
; Zur Verwendung der Einträge bitte Readme-Datei lesen
; Please see the readme-file for usage
;
;=========================================================================================
[SMTPHosts]
Server=smtp.mymailserver.de
Port=25
LoginName=myaccount
LoginPassword=mypassword
POP3AuthServer=pop3.mymailserver.de
[Sender]
SenderName=myname
SenderAddress=myname@mymailserver.de
[Recipients]
RecipientName=Empfänger1; Empfänger2
RecipientAddress=test@email.de;test2@email.de
RecipientCCName=
RecipientCCAddress=
RecipientBCCAddress=
RecipientVariable1=test@email.de;test2@email.de
[Content]
Subject=<!CONTVAR1>
MailType=TEXT
MessageType=TEXT
Message=MailMotor-<!CONTVAR1> an <!RECVAR1> vom <!DATE>
Attachments=c:\test\test.txt
ContentVariable1=Testmail
[Options]
FullLog=true
Language=lang_en
ShowForm=true
GlobalErrorLog=c:\test\mailmotor_globalerror.log
Die Konfigurationseinträge in Einzelnen:
[SMTPHosts]
Server definiert den SMTP-Server (IP oder Host-Name) über dessen
Port die eMail verschickt werden soll.
Falls der SMTP-Server eine Authentifizierung benötigt, müssen die Eigenschaften
LoginName und LoginPassword definiert werden.
Sollte die Authentifizierung am SMTP-Server über einen POP3-Server ("POP First")
notwendig sein, muss zudem der POP3-Server (IP oder Host-Name) in POP3AuthServer
angegeben werden.
[Sender]
SenderName definiert den Klartext (Namen) des Absenders und SenderAddress
die eMail-Adresse.
[Recipients]
RecipientName definiert den Klartext der Empfänger und
RecipientAddress die dazugehörigen eMail-Adressen. Das gleiche gilt für
CC und BCC, wobei bei BCC kein Name notwendig ist.
Mehrere Empfänger werden jeweils durch Semikolon getrennt, wobei für den Namen
und die Adresse jeweils immer die gleiche Anzahl an Einträgen notwendig ist.
Zum Personalisieren von Nachrichten können in diesem Abschnitt Variablen
abgelegt werden, die beim Versand der eMail in den Nachrichtentext
eingesetzt werden. Die Variablennamen lauten 'RecipientVariableX', wobei das
X eine fortlaufende Nummer darstellt. Die Werte der einzelnen Variablen
werden durch Semikolon separiert. Die Anzahl der Werte einer Variablen muss
mit der Anzahl der Empfänger übereinstimmen, sonst wird ein Fehler erzeugt.
WICHTIG: Werden
Empfängervariablen eingesetzt, so wird an jeden Empfänger EINE einzelne
eMail verschickt und die Werte der CC- und BCC-Empfänger werden außer Kraft
gesetzt! Ein Semikolon wird als Trennzeichen gewertet und darf somit nicht
in den Werten selbst erscheinen!
[Content]
Subject definiert den Betreff der Nachricht.
MailType kann entweder den Wert TEXT oder den Wert
HTML annehmen, je nachdem in welchem Format die eMail versandt
werden soll.
Über MessageType (TEXT oder FILE) wird
entschieden, ob der String in Message als einfacher Text oder als
Pfadangabe zu einer Textdatei zu werten ist. Wird FILE definiert
wird der Inhalt der in Message angegebenen Datei als Nachrichteninhalt
verwand.
In Message ist die Angabe von folgenden Variablen (Platzhalter)
möglich, die während der Laufzeit ersetzt werden:
<!NOW> = aktuelles Datum mit Uhrzeit
<!DATE> = aktuelles Datum
Über Attachments können Anhänge (Dateien) definiert werden, die
mit der eMail mitgeschickt werden. Mehrere Anhänge werden durch Semikolon getrennt.
Mittels Inhaltsvariablen ('ContentVariable1','ContentVariable2', etc.) in
diesem Abschnitt lässt sich der Nachrichtentext und der Betreff
parametrisieren. Dies ist vor allem nützlich, wenn die Nachricht als Datei
vorliegt ('MessageType=FILE'). Für verschiedene Mail-Vorgänge lässt sich so
immer die gleiche Dateivorlage verwenden.
[Options]
Steht FullLog auf TRUE,
wird die gesamte Kommunikation des MailMotors mit dem SMTP-Server
in der Log-Datei (gleichlautend mit INI im gleichen Pfad) festgehalten. Fehlt
der Eintrag oder steht er auf FALSE, so wird lediglich das Ergebnis
der Übermittlung festgehalten.
Der Name der jeweilige Log-Datei ist gleichlautend mit der angegebenen Konfigurationsdatei.
Wurde kein INI-Parameter angegeben, so setzt sich der Name der Log-Datei aus
dem Jahr, dem Monat und dem Tag des aktuellen Datums zusammen: z.B. 20060227.log.
Language gibt die zu verwendende Sprachdatei im Anwendungsordner
an (Dateiname ohne Endung) Ist Language leer oder fehlt, so wird
Englisch als Standardsprache verwendet.
Die Option 'ShowForm' legt fest, ob der Status des Programms und
des eMail-Versands
während der Laufzeit in einem Fenster ausgegeben wird oder nicht.
Ist die Option 'GlobalErrorLog' auf einen Wert (Dateiname inkl. Pfad)
gesetzt, werden alle
Fehler des MailMotor dort zusätzlich global festgehalten. Ist die dort
eingestellte Datei
nicht vorhanden oder endet sie nicht auf .LOG, so findet keine globale
Fehlererfassung statt.
Empfängervariablen
Wie bereits erwähnt, sendet MailMotor standardmäßig eine
eMail, d.h. einen Text, an alle in der Konfiguration angegebenen Empfänger.
Um personalisierte Mail-Texte zu ermöglichen, verändert sich dieses
Verhalten, sobald im Abschnitt Recipients mindestens eine
Empfängervariable (z.B. RecipientVariable1) mit einem Wert
konfiguriert ist. In diesem Fall muss MailMotor vor dem Versand der eMail für jeden
einzelnen Empfänger eine individuelle Nachricht erstellen.
Unabhängig davon, ob der Nachrichtentext über eine Datei geladen wird
oder ob er direkt in der INI-Datei steht, können die Textteile die
personalisiert werden sollen, durch eine Variable mit der Syntax <!RECVARx>
ersetzt werden, wobei das x für die laufende Nummer der in Recipients
konfigurierten Empfängervariablen steht.
Beispielkonfiguration:
[Recipients]
...
RecipientVariable1=Sehr geehrter Herr Müller;Sehr geehrte Frau Dr. Mayer;Sehr geehrte Damen und Herren
RecipientVariable2=15.05.2006;16.05.2006;20.05.2006
Beispieltext:
<!RECVAR1>
Hiermit laden wir Sie am <!RECVAR2> zu einem Besuch in unseren
Geschäftsräumen ein.
...
Aus einer eMail werden in diesem Beispiel somit 3 verschiedene, die
einzeln versandt werden müssen. Aus diesem Grunde werden auch die
Recipients-Werte CC und BCC außer Kraft gesetzt, um zu verhindern,
dass ein CC-Empfänger bei z.B. 50 konfigurierten Empfängern 50 einzelne
eMails erhält.
Es ist bei der Anlage der Empfängervariablen unbedingt darauf zu achten,
dass das Semikolon NUR als Trennzeichen zwischen zwei Werten verwendet wird.
Die Anzahl der Werte jeder Variable muss mit der Anzahl der Empfänger
übereinstimmen.
Inhaltsvariablen
Ähnlich wie die Empfängervariablen lassen sich die Inhaltsvariablen
einsetzen. Mit dem einen Unterschied, dass diese im Nachrichtentext und im
Betreff einsetzbar sind und für alle Empfänger gleichermaßen gelten.
Mit Ihnen lassen sich Textpassage parametrisieren, wenn man eine Datei
als Textlieferant einsetzt ('MessageType=FILE'). So kann man für
unterschiedliche Mail-Vorgänge immer die gleiche Vorlagendatei verwenden und
die Textteile, die sich jedesmal ändern, werden in Inhaltsvariablen
definiert.
Im Text werden die Platzhalter nach dem Schema <!CONTVARx>
notiert, wobei das x durch eine laufende Nummer zu ersetzen ist.
Einsatz - Alternative 1: Windows Taskplaner
Für den regelmäßigen Versand von eMails eignet sich der in Windows
integrierte Taskplaner ganz hervorragend. Im folgenden Konfigurationbeispiel,
wird der MailMotor jede Stunde mit dem Parameter der zu
verwendenden INI-Datei aufgerufen.

Einsatz - Alternative 2: MailMotorAgent
Eine andere Möglichkeit des Einsatzes für das Tool ist die Auslagerung
des eMails-Versandes aus einer anderen Applikation heraus, z.B. um dort
Ressourcen zu sparen.
Die Hauptanwendung müsste nur noch die entsprechenden
Konfigurationsdateien erzeugen und der MailMotor anstossen.
In diesem Fall ist es oft jedoch wünschenswert den Start des
MailMotors auch auf einem anderen Computer zu verlagern...
Diese Aufgabe kann der MailMotorAgent unter Windows
2000/XP oder Windows 2003 Server übernehmen. Er
ist, wie das Tool selbst, in Visual Basic entwickelt und lässt sich auf dem
Zielrechner als Dienst installieren.
Er durchsucht in einem
festlegbaren Intervall ein zu definierendes
Verzeichnis nach INI-Dateien und führt anschließend den im gleichen
Ordner liegenden MailMotor mit den gefundenen INI-Dateien
aus. Anschließend verschiebt er die verarbeitete INI-Datei in ein
Archivverzeichnis, um zu verhindern, dass eMails mehrfach gesendet werden.
MailMotorAgent besitzt eine eigene Konfigurationsdatei (mailmotoragent.ini) mit
folgenden Werten:
CheckInterval (Intervall in Sekunden)
WorkingPath (Arbeitsverzeichnis, in dem die zu verarbeitenden
INI-Dateien liegen)
ArchivePath (Archivverzeichnis, in das die abgearbeiteten
INI-Dateien verschoben werden)
Language (zu verwendende
Sprachdatei für die Protokollierung von Fehlern)
Die Implementierung des VB-Programms als
Dienst basiert auf dem frei verfügbaren "NT Service Control (NTSVC)" von
Microsoft. Wer Näheres zu dieser Technik erfahren möchte, dem sei der
zerbit-Artikel VB-Programm als Dienst
starten ans Herz gelegt.
Die Installation des MailMotorAgents ist
denkbar einfach. Am besten kopieren Sie zunächst die Datei ntsvc.ocx
in Ihr Windows\System32-Verzeichnis. Nun muss das Control über die
Kommandozeile oder den Ausführen-Dialog mit folgendem Aufruf registriert
werden:
c:\windows\system32\regsvr32.exe c:\windows\system32\ntsvc.ocx
Für die Installation des MailMotorAgent gibt es drei
Schalter:
/i ... Installation des Dienstes
/u ... Deinstallation des Dienstes
/h ... Hilfe
Für die Inbetriebnahme brauchen Sie nur folgenden Befehl auszuführen, wobei
Sie den Programmordner an Ihre Gegebenheiten anpassen müssen:
c:\<Programmordner>\mailmotoragent.exe /i
Sie erhalten nun eine Meldung, das der Dienst nun noch über den Service Control Manager
konfiguriert werden muss.
Damit gemeint ist der Dienste-Dialog aus dem Startmenübereich "Verwaltung". Dort müssen Sie sich
entscheiden, ob er automatisch mit Windows gestartet werden soll oder nicht.
Zudem können Sie festlegen, mit welchem Konto der Dienst starten soll und ob
er mit dem Desktop interagieren kann. Ist das Häkchen wie in der Abbildung
gesetzt, so wird ein Dialog eingeblendet (siehe oben), der die Aktionen des
MailMotorAgent anzeigt.
Ist alles fertig eingestellt und gestartet, läuft der MailMotor
los, sobald im Arbeitsverzeichnis eine korrekt eingestellte
INI-Datei landet.
Protokollierung
Jede Aktion des MailMotors wird in eine der INI-Datei gleichnamige
Log-Datei geschrieben, wobei Datum, Uhrzeit und Ergebnis des Versandes
festgehalten wird. Man hat bei der Konfiguration die Wahl zwischen einer
kurzen oder einer ausführlichen Protokollierung.
Setzt man den MailMotor häufig mit unterschiedlichen
Konfigurationen ein, die z.B. vom MailMotorAgent abgearbeitet
werden, so kann man alle auftretenden Fehler zusätzlich auch in einer frei
definierbaren globalen LOG-Datei protokollieren lassen
Lokalisierung
Sie haben die Möglichkeit alle Meldungen des Programms über Sprachdateien
zu lokalisieren. Im Paket enthalten sind zur Zeit die Sprachen
deutsch und englisch. Weitere Übersetzungen sind herzlich willkommen
(eMail)!
Systemvoraussetzung
Die Anwendung wurde mit Visual Basic 6 entwickelt. Sie ist ohne Installation
unter Windows XP SP1 und höher lauffähig, da dort bereits die VB-Runtime
vorinstalliert ist. Das gleiche gilt für Windows Server 2003.
Sollte
das Tool dennoch nicht laufen, kann die nachträgliche Installation der
VB6-Runtime helfen, zu erhalten im
Microsoft Download Center (vbrun60sp6.exe).
Sollte auf dem Zielsystem die Bibliothek mswinsck.ocx
nicht vorhanden sein, die nicht in der VB6-Runtime enthalten ist, so kann
diese hier heruntergeladen werden.
Sie muss, nachdem sie ins Windows\System32-Verzeichnis kopiert worden ist,
noch mit dem Befehl %systemroot%/system32/regsvr32
mswinsck.ocx registriert werden.
Auf Windows 2003 Server-Systemen ist der MailMotor
prinzipiell auch lauffähig. Da er jedoch auf die mswinsck-Bibliothek
aufsetzt und Microsoft diese als reine Client-Bibliothek entworfen hat, kann
es laut MSDN auf Systemen mit installiertem IIS und COM+ zu Problemen
kommen.
Historie
v1.0 Build 09 24.08.2005 |
Fehlerbehebung:
- Korrekte Behandlung der Inhaltsvariablen, für den Fall, das
keine angeben wurden
(FEHLER in 'Main': 9 - Index außerhalb des gültigen Bereichs)
|
v1.3 Build 08 13.05.2006 |
Erweiterung:
- Einführung von Inhaltsvariablen zur Parametrisierung des Nachrichtentextes und des Betreffs
Fehlerbehebung:
- Korrekte Verarbeitung der Parameter 'ShowForm' und 'GlobalErrorLog'
- Korrektes Einlesen von Konfigurationseinträgen mit bis zu 20480 Zeichen (bisher 1024 Zeichen)
|
v1.3 Build 05 05.05.2006 |
Erweiterung:
- Einführung von Empfängervariablen zum Versand von
personalisierten eMails
- Möglichkeit zum Unterdrücken des Anzeigefensters
- Möglichkeit zum Protokollieren von Fehler in einer globalen
Datei
- Neuer Verarbeitungsdienst "MailMotorAgent"
|
v1.2 Build 08 28.02.2006 |
Erweiterung:
- Erweiterung des Parameters /ini: auf komplette Pfadangaben (auch
UNC-Pfade)
- Erweiterung des Parametersatzes auf alle Konfigurationseinträge
- Ausgabe aller Meldungen über lokalisierte und anpassbare Sprachdateien
- WICHTIG: Änderung der Namen und der Verwendung
der Konfigurationseinträge Sender, Recipients und Attachments (bitte
die Beschreibung der Abschnitte oder README lesen!)
|
v1.1 Build 03 25.12.2005 |
Erweiterung:
- Senden von eMails über geschützte SMTP-Server; inkl. "POP First"-Authentifizierung
- Möglichkeit zur Aufzeichnung der Kommunikation in der Log-Datei
|
v1.0 Build 08 11.11.2005 |
Fehlerbehebung:
- Fix des Problems, daß Attachments unter bestimmten Umständen nicht verschickt werden.
|