Mail verwenden ohne Outlook

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.

Abb. 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 Abb. 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:

  • Envelope: enthält den Sender und Empfänger der Mail
  • Header: enthält Daten wie From, To, Subject, Date oder Message-ID
  • Body: enthält die eigentliche Nachricht
  • 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:

  • From: Senderadresse, eventuell mit vollem Namen und anschließender, in spitze Klammern gesetzter E-Mail-Adresse
  • To: Empfängeradresse, Syntax wie From
  • Subject: Betreff der E-Mail
  • Date: Datum der Mail, muss für eine korrekte übernahme in den Mail-Client ein bestimmtes Format haben, das später beschrieben wird
  • Reply-To: Wenn der Empfänger einer Mail Antworten nicht an den Absender, sondern eine andere Adresse senden soll, kann man diesen Header verwenden.
  • 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.

    Möchten Sie weiterlesen? Dann lösen Sie Ihr Ticket!
    Hier geht es zur Bestellung des Jahresabonnements des Magazins Access im Unternehmen:
    Zur Bestellung ...
    Danach greifen Sie sofort auf alle rund 1.000 Artikel unseres Angebots zu - auch auf diesen hier!
    Oder haben Sie bereits Zugangsdaten? Dann loggen Sie sich gleich hier ein:

    Schreibe einen Kommentar