André Minhorst, Duisburg
Die Möglichkeit, Mails ohne die Verwendung von Outlook zu versenden, würde vielen Access-Anwendungen gut zu Gesicht stehen. Wo auch immer der direkte Versand von Informationen interessant ist, tritt normalerweise Outlook auf den Plan. Das ist aber nicht immer gewünscht, denn warum sollte man denn einen Umweg gehen, wenn man auch direkt auf die entsprechenden Funktionen des Betriebssystems – in diesem Fall auf die Bibliothek Winsock.dll – zugreifen kann
Wer einmal von Access aus versucht hat, mit Hilfe von Microsoft Outlook automatisiert Mails zu verschicken, und sich ein wenig mit SMTP auskennt, der weiß, dass er dabei mit Kanonen auf Spatzen schießt. Dabei öffnet man nämlich eine Riesenanwendung, nur um ein paar Zeilen an einen Mailserver zu schicken. Wenn man Outlook nur zu diesem Zweck startet und anschließend wieder schließt, frißt dieser Vorgang durchaus einige Sekunden.
Warum also nicht einmal ein wenig in der Geheimniskiste kramen und E-Mails versenden, ohne den Umweg über Outlook in Kauf zu nehmen Wenn man auf den – zugegebenermaßen vorhandenen – Komfort von Outlook verzichten kann und einfach nur zu bestimmten Anlässen eine Mail direkt über die Datenbankanwendung versenden lassen möchte, ist das bestimmt eine gewisse Vorarbeit wert.
Anwendungsfälle dafür gibt es genug. Das Verschicken einer Rundmail an ein paar hundert Kunden aus der Kontakte-Tabelle geht damit sicher wesentlich schneller als mit Outlook, aber das ist noch nicht einmal der wichtigste Grund, Access in einen Mail- beziehungsweise SMTP-Client umzubauen. Viel interessanter ist beispielsweise das automatisierte Verschicken einer Mail, wenn zum Beispiel der Lagerbestand einer bestimmten Ware einen kritischen Wert erreicht oder wenn Fehlfunktionen auftreten.
Dazu bedarf es allerdings einiger grundlegender Kenntnisse über Winsock, SMTP sowie den Aufbau von Mails im Allgemeinen. Die nachfolgenden Kapitel behandeln diese Themen in der notwendigen Tiefe.
Schließlich folgen zum Schluss einige Beispiele für den Praxiseinsatz von SMTP innerhalb von Access-Datenbanken.
Auf Windows-Betriebssystemen verwendet man zum Versenden von E-Mails in der Regel Microsoft Outlook, Outlook Express oder einen ähnlichen Mail-Client.
Diese Anwendungen verfügen über eine Menge wichtige und weniger wichtige Funktionen, die dem Anwender den Großteil der Arbeit abnehmen. Der muss in der Regel nur noch den oder die Adressaten, die Betreffzeile und den Text eingeben und auf den Senden-Button klicken, um eine Mail zu versenden. In manchen Fällen gibt”s noch eine Beilage in Form eines so genannten Attachments, das aber ebenfalls bequem per Dialog zu ermitteln ist.
Bild 1: Der SMTP-Server ist zur Eingabe bereit.
Wenn man von Access aus eine Mail versenden möchte, kann man dies mit Microsoft Outlook ab der Version 2000 ohne Probleme per Automatisierung erledigen. Per VBA lassen sich dann leicht die Methoden, Ereignisse und Eigenschaften des Outlook-Objektmodells ansprechen und von Access aus fernsteuern.
Outlook selbst verwendet dann das zur Familie der TCP/IP-Protokolle gehörende SMTP (Simple Mail Transfer Protocol), um eine E-Mail an den entsprechenden SMTP-Server zu schicken. Dieser befördert diese E-Mail dann gegebenenfalls über weitere SMTP-Server zum Zielrechner, von wo der Adressat die E-Mail dann mit seiner eigenen E-Mail-Software per POP3 auf seinen Rechner holt. Diesen letzten Schritt behandelt der vorliegende Beitrag indes nicht, obwohl auch das automatisierte Abholen und Auswerten von E-Mails sicher seinen Reiz hätte.
Den SMTP-Server, auch MTA (Mail Transfer Agent) genannt, stellt in der Regel der Provider zur Verfügung, über den man auch die Verbindung zum Internet herstellt. Wer über eine eigene Internetseite oder über Webspace für andere Zwecke verfügt, kann möglicherweise auf eine eigene E-Mail-Adresse und damit auf einen alternativen SMTP-Server zugreifen. Und wer es auf die Spitze treibt, hat vielleicht sogar einen eigenen Server gemietet oder gekauft, auf dem er seinen persönlichen Mailserver mit entsprechendem SMTP-Dienst betreibt.
Wenn nun beispielsweise Microsoft Outlook eine Mail an einen SMTP-Server schicken soll, baut es zunächst eine Verbindung zum Zielrechner auf. Dafür ist die Winsock-Schnittstelle zuständig, deren Funktionen sich in der Datei Wsock32.dll befinden. Diese Schnittstelle ist nicht nur die Grundlage für das SMTP-Protokoll, sondern auch für weitere Dienste wie Telnet oder FTP.
Ist eine Verbindung via Winsock eingerichtet, können die verbundenen Rechner Nachrichten hin- und herschicken. Im vorliegenden Fall sind das SMTP-Befehle und die entsprechenden Antworten. Mit den SMTP-Befehlen übergibt der sendende Rechner alle Informationen über die zu versendende Mail – angefangen von den wichtigsten Daten, nämlich der Absender- und der Empfängeradresse bis hin zum eigentlichen Inhalt. Dieser wiederum kann sich äußerst vielfältig gestalten – von der einfachen Textmail über eine HTML-Mail bis hin zu Mails mit Anhängen oder mehreren unterschiedlichen Inhaltsarten, die der empfangende Client je nach seinen Möglichkeiten anzeigt.
Das Simple Mail Transfer Protocol ist recht einfach zu überschauen. Nachfolgend ist ein Beispiel skizziert, das dessen Anwendung in der Praxis erläutert und gleichzeitig die Einfachheit verdeutlicht.
Dabei verwendet man die Eingabeaufforderung von Windows, um per Tastatur eine komplette Mail an einen beliebigen Adressaten zu versenden.
Nach dem öffnen der Eingabeaufforderung startet man zunächst eine Verbindung zum Mailserver, und zwar über den Port 25. Die entsprechende Anweisung sieht folgendermaßen aus (im Beispiel für den Mailserver von Strato):
telnet post.strato.de 25
Die Angabe des Ports, also der 25, ist besonders wichtig. Lässt man diese Information weg, geht Telnet von Port 23 aus, was in der Regel nicht zum Erfolg führt. Daraufhin meldet sich der SMTP-Server des jeweils angegebenen Providers mit einer Ausgabe wie in Bild 1.
Anschließend kann man direkt mit der Eingabe der gewünschten SMTP-Befehle beginnen. Quellcode 1 enthält eine beispielhafte Kommunikation zwischen Client und SMTP-Server.
Zunächst begrüßt man den Server mit dem Befehl HELO <Rechnername>. Der SMTP-Server antwortet mit einem lockeren “…pleased to meet you” – je nach Server kann man aber auch eine andere Floskel lesen.
Anschließend folgen die drei eigentlichen Elemente einer E-Mail:
Der Umschlag der Mail
Danach folgen die beiden wichtigsten Informationen: Die übermittlung des Adressaten sowie des Absenders der Mail. In beiden Fällen ist man mit der Großschreibung der Befehle, dem Einfassen der Adressen in spitzen Klammern und dem Verzicht auf Leerzeichen zwischen Doppelpunkt und Adresse auf der sicheren Seite. Soweit der SMTP-Server alle bisherigen Angaben akzeptiert, sendet er jeweils den Code 250 als Bestätigung der Ausführung der Kommandos zurück – unter Umständen ergänzt durch weitere, serverabhängige Floskeln.
Der Briefkopf
Anschließend leitet man durch die Anweisung DATA die Eingabe der Header-Informationen und des eigentlichen Inhalts der Mail ein.
Während die soeben genannten Daten quasi den Briefumschlag der Mail darstellen und für die eigentliche Versendung wichtig sind, folgen nun einige Daten, die bei einem normalen Brief auch innerhalb des Umschlags auf dem Brief selbst stehen würden. Dazu gehören folgende Informationen:
Hinweis
Es gibt noch eine Reihe weiterer Header, deren Beschreibung allerdings den Rahmen dieses Beitrags sprengen würde. Weitere Informationen findet man unter der folgenden Internetadresse (ohne Zeilenumbruch): http://sites.inka.de/ancalagon/faq/headerfaq.html
Der Inhalt
Nach den Headerzeilen folgt in der Regel der eigentliche Inhalt einer Mail. Diesen schreibt man einfach ohne weitere Angaben in die dem letzten Header folgende Zeile. Dabei kann man beliebige Zeichen und auch Leerzeilen verwenden.
Das Absenden der Mail initiiert man durch die Eingabe eines einzelnen Punktes in einer Zeile. Der Server akzeptiert die Mail dann entweder mit dem Code 250 oder “meckert”, wenn ein Header nicht den Konventionen entsprechen sollte.
In ersterem Fall ist die Mail damit verschickt und trifft in Kürze beim Empfänger ein – zumindest, sofern nicht vorher ein Viren- oder Spamprogramm auf den Plan tritt und die Mail aussortiert, ansonsten muss man die eingegebenen Daten überprüfen.
220 post.webmailer.de ESMTP Sendmail 8.12.10/8.12.10; Thu, 8 Jul 2004 09:44:57 +0200 (MEST) HELO Mein Rechnername 250 post.webmailer.de Hello pD9561037.dip.t-dialin.net [217.86.16.55], pleased to meet you MAIL FROM:<andre@minhorst.com> 250 2.1.0 <andre@minhorst.com>... Sender ok RCPT TO:<info@access-im-unternehmen.de> 250 2.1.5 <info@access-im-unternehmen.de>... Recipient ok DATA 354 Start mail input; end with <CRLF>.<CRLF> From:André Minhorst <andre@minhorst.com> To:Info <info@access-im-unternehmen.de> Subject:Beispielmail für Access im Unternehmen Date:Thu, 8 Jul 2004 09:44:57 +0200 Hallo Access im Unternehmen, dies ist eine Beispielmail. Viele Grüße André Minhorst . 250 2.0.0 i687ivHP001747 Message accepted for delivery
Quellcode 1
Damit sind die Grundlagen für das Versenden einer Mail per SMTP geklärt. Später kommen noch einige Informationen hinzu, wie man beispielsweise Dateien an eine Mail anhängen oder eine Mail gleichzeitig im Text- und HTML-Format verschicken kann.
Die Grundlage für das Versenden von Mails direkt von Access aus ist die Herstellung einer Verbindung zwischen dem verschickenden Rechner und dem Zielrechner, also dem SMTP-Server. Diese Verbindung realisiert man über die Winsock-Schnittstelle von Microsoft Windows.
Die Prozeduren und Funktionen in den nachfolgenden Beispielen basieren auf der Arbeit von John Rhoton. Er beschreibt in seinem Buch Programmer”s Guide to Internet Mail (Digital Press, 1999) unter anderem ausführlich die Funktionsweise von Winsock und SMTP. Die diesem Beitrag zugrunde liegenden Funktionen können dem Download für Visual Basic unter der folgenden Adresse entnommen werden (ohne Zeilenumbruch): http://www.winsite.com/bin/Info500000022279.
Die Verwendung der Winsock-Schnittstelle ist auf den ersten Blick eine sehr umfangreiche und unübersichtliche Geschichte. Dank der Arbeit von John Rhoton reduziert sich das Ganze aber auf einige wesentliche Punkte. In den Beispieldaten, die er eigentlich für die Verwendung in Visual Basic zusammengestellt hat, findet man unter anderem eine recht große Sammlung an API-Funktionen.