André Minhorst, Duisburg
In Ausgabe 4/2004 haben wir eine Lösung für das Versenden von E-Mails mit SMTP vorgestellt. Und wer E-Mails versendet, der will vermutlich auch E-Mails abrufen. Im vorliegenden Beitrag versorgen wir Sie mit den Grundlagen zu POP3 und den Funktionen, die Sie für den Zugriff auf POP3-Konten benötigen.
POP3 ist die Abkürzung für Post Office Protocol in der Version 3. Es ist wie SMTP ein übertragungsprotokoll, das in diesem Fall die übertragung von E-Mails von einem E-Mail-Server zu einem E-Mail-Client regelt.
POP3 stellt einige Kommandos bereit, mit denen der E-Mail-Client Informationen vom E-Mail-Server über vorhandene E-Mails erhalten und diese beispielsweise herunterladen oder löschen kann. Genau wie SMTP erfolgt die übertragung der Daten standardmäßig über einen bestimmten Port, in diesem Fall über den Port 110.
Kommandos von POP3
Im Rahmen des vorliegenden Beitrags benötigen wir die folgenden POP3-Kommandos:
Beispiel
Um folgendes Beispiel nachvollziehen zu können, benötigen Sie ein POP3-Konto auf einem E-Mail-Server Ihrer Wahl. Wenn möglich, sollten Sie ein sonst nicht benutztes Konto verwenden, um zu verhindern, dass möglicherweise wichtige Mails verloren gehen.
Im Beispiel werden wir per Telnet eine POP3-Sitzung initiieren, in der wir verschiedene Informationen abfragen und eine E-Mail herunterladen. Dazu müssen Sie natürlich zunächst einmal eine E-Mail mit einem Beispielbetreff und Beispielinhalt an die entsprechende Adresse schicken. Und damit auch etwas Betrieb auf dem Mail-Server herrscht und die Beispiele anschaulicher sind, schicken Sie diese Mail direkt noch einmal hinterher.
Nun öffnen Sie die Eingabeaufforderung von Windows und starten die POP3-Sitzung via Telnet. Als Mailserveradresse geben Sie die Adresse an, die Sie auch im E-Mail-Client eingetragen haben beziehungsweise eintragen würden. Wichtig ist die Angabe des Ports:
Abb. 1: Abrufen einer E-Mail
telnet <Mailserveradresse> 110
Die Eingabeaufforderung ändert nun den Titel auf Telnet <Mailserveradresse> und zeigt eine Meldung an, die mit +OK beginnt.
Nun melden Sie sich an, indem Sie mit den beiden Anweisungen USER und PASS den Benutzernamen und das Kennwort angeben.
Auch hier verwenden Sie wieder die Daten, mit denen auch der E-Mail-Client arbeitet:
USER <Benutzername> +OK PASS <Kennwort> +OK
Auf beide Eingaben sollte der E-Mail-Server wieder mit +OK antworten, ansonsten stimmen die Daten möglicherweise nicht.
Nun geht“s richtig los: Mit der STAT-Anweisung überprüfen Sie, wie viele Mails das Konto derzeit enthält und wie viel Speicherplatz diese belegen.
STAT +OK 2 1292
Die Antwort des POP3-Servers bedeutet, dass sich derzeit zwei Mails mit einer Größe von insgesamt 1292 Bytes auf dem betreffenden Konto befinden. Diese Antwort ist immer gleich aufgebaut – das ist auch dringend erforderlich, da verschiedenste E-Mail-Clients auf diese und andere Informationen zugreifen und sich auf das richtige Format verlassen müssen.
Hinweis
Das STAT-Kommando und die anderen nachfolgend beschriebenen Kommandos liefern Informationen über den Zustand des POP3-Kontos zum Zeitpunkt des Sitzungsbeginns. Wenn Sie also beispielsweise während einer Sitzung eine weitere Testmail schicken, wird diese nicht angezeigt.
Schauen wir uns nun die Informationen zu den Mails im Einzelnen an. Das Kommando LIST gibt eine Liste der Größenangabe zu allen E-Mails dieses Kontos aus. Der Punkt in der letzten Zeile dient dem Abschließen mehrzeiliger Ausgaben:
LIST +OK 1 646 2 646 .
Sie können die Informationen auch nur für eine E-Mail anzeigen lassen, indem Sie die Nummer der E-Mail als Parameter angeben:
LIST 2 +OK 2 646
Nun möchten Sie auch den Inhalt der E-Mail erfahren. Dafür ist die Anweisung RETR zuständig. Als Parameter geben Sie die ID der auszugebenden Mail an. Die Anweisung und die resultierende Ausgabe finden Sie in Abb. 1.
Wer den Beitrag Mail versenden ohne Outlook aus Ausgabe 4/2004 gelesen hat, erkennt den Inhalt der E-Mail: Es handelt sich dabei um die komplette E-Mail inklusive Header-Informationen. Nachdem Sie den Inhalt dieser Test-E-Mail gelesen haben, können Sie diese löschen. Dazu verwenden Sie folgende Anweisung mit der ID der E-Mail als Parameter:
DELE 2
Die Antwort lautet +OK, wenn die E-Mail erfolgreich gelöscht werden konnte. Anderenfalls gibt der POP3-Server eine Meldung wie -ERR already deleted zurück.
Schließlich können Sie mit der Anweisung LAST die ID ermitteln, die der größten ID der gelesenen E-Mails entspricht.
Beenden der Sitzung
Mit der Anweisung QUIT beenden Sie schließlich die Sitzung.
Es gibt noch weitere Kommandos, die aber im Rahmen des vorliegenden Beitrags nicht wichtig sind. Eine vollständige Beschreibung von POP3 enthält das Dokument RFC 1225, das Sie unter anderem hier finden: http://www.faqs.org/rfcs/rfc1225.html
Es gibt genügend Gründe, warum eine Access-Datenbank in der Lage sein sollte, E-Mails via POP3 von einem beliebigen E-Mail-Konto abzuholen. So könnte etwa eine Shop-Software die via Webformular eingegebenen Bestellungen direkt per E-Mail auf ein Konto schicken, von dem eine lokale Access-Datenbank sich die Bestellungen abholt und direkt bearbeitet.
Oder Sie bestücken eine Software mit einer Fehlerbehandlung, die aussagekräftige Fehlermeldungen per SMTP an ein E-Mail-Konto schickt, von wo sie eine geeignete Ticket-Datenbank abholt und auswertet.
Hinweis
Die Beispieldatenbanken finden Sie auf der diesem Magazin beiliegenden CD unter den Dateinamen POP3_97.mdb (für Access 97) und POP3_00.mdb (für Access 2000 und höher).
Fehlt eigentlich nur noch die Möglichkeit, die E-Mails per VBA abzurufen. Das ist allerdings nicht ganz einfach und erfordert einige Umwege. Diese führen namentlich über einige API-Funktionen, deren Deklarationen im Modul mdlAPI der Beispieldateibanken zu finden sind. Da jede einzelne Interaktion mit dem Webserver via Winsock relativ viele API-Aufrufe erfordert, wurden die Methoden für deren Durchführung in einer Klasse namens clsWinsock gekapselt.
Die Klasse bietet gegenüber den API-Aufrufen wesentlich griffigere Methoden und verbirgt eine Menge Funktionalität. Eine Auflistung der verwendeten Methoden finden Sie in Tab. 1.
Als Grundlage für die Prozeduren und Funktionen in den nachfolgenden Beispielen dient die 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 POP3. 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.
Methode |
Beschreibung |
StartWinsock |
Startet die Winsock-Schnittstelle |
GetIPAddress |
Ermittelt die IP-Adresse einer angegebenen Internetadresse |
CreateSocket |
Erstellt eine Schnittstelleninstanz und ermittelt einen entsprechenden Handler |
ConnectSocket |
Erstellt die Verbindung mit der Zieladresse über die Winsock-Schnittstelle |
SendSocket |
Schickt ein Kommando über die Winsock-Schnittstelle |
ReceiveSocket |
Fragt die Antwort des gegenüberliegenden Partners ab |
ReleaseSocket |
Beendet die Verbindung über die Winsock-Schnittstelle |
Tab. 1: Methoden der Klasse clsWinsock
Um eine möglichst eng an den eigentlichen Anweisungen von POP3 orientierte Schnittstelle zu ermöglichen, werden diese Anweisungen in einer weiteren Klasse gekapselt. Diese Klasse heißt clsPOP3 und enthält die Methoden und Eigenschaften aus Tab. 2.
Methode |
Beschreibung |
StartSession |
Startet eine Sitzung. Parameter: Servername, Benutzername, Kennwort |
GetStatus |
Ermittelt die Anzahl der vorhandenen Mails und speichert diese in der Eigenschaft NumberOfMails |
ReadMessage |
Liest eine Nachricht in die Variable Message ein. Parameter: Nummer der Nachricht Ende des frei verfügbaren Teil. Wenn Du mehr lesen möchtest, hole Dir ... den kompletten Artikel im PDF-Format mit Beispieldatenbank diesen und alle anderen Artikel mit dem Jahresabo |