E-Mails abrufen mit Access und POP3

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:

  • USER <Benutzername> gibt den Benutzernamen für das gewünschte Konto auf dem E-Mail-Server an.
  • PASS <Kennwort> dient der übergabe des Kennworts. Beachten Sie, dass dies in Klartext erfolgt.
  • STAT liefert Informationen wie die Anzahl und die Gesamtgröße der enthaltenen E-Mails.
  • LIST (n) liefert die Anzahl und die Größe der n-ten E-Mail. Ohne den Parameter n erfolgt die Ausgabe der Informationen für alle vorhandenen E-Mails.
  • RETR n holt die n-te E-Mail vom E-Mail-Server ab.
  • DELE n löscht die n-te E-Mail am E-Mail-Server.
  • QUIT beendet die aktuelle POP3-Sitzung.
  • 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

    Schreibe einen Kommentar