Zur Hauptseite ... Zum Onlinearchiv ... Zum Abonnement ... Zum Newsletter ... Zu den Tools ... Zum Impressum ... Zum Login ...

Achtung: Dies ist nicht der vollständige Artikel, sondern nur ein paar Seiten davon. Wenn Sie hier nicht erfahren, was Sie wissen möchten, finden Sie am Ende Informationen darüber, wie Sie den ganzen Artikel lesen können.

Kompletten Artikel lesen?

Einfach für den Newsletter anmelden, dann lesen Sie schon in einer Minute den kompletten Artikel und erhalten die Beispieldatenbanken.

E-Mail:

Gedrucktes Heft

Diesen Beitrag finden Sie in Ausgabe 6/2004.

Unser Angebot für Sie!

Lesen Sie diesen Beitrag und 500 andere sofort im Onlinearchiv, und erhalten Sie alle zwei Monate brandheißes Access-Know-how auf 72 gedruckten Seiten! Plus attraktive Präsente, zum Beispiel das bald erscheinende Buch 'Access 2010 - Das Grundlagenbuch für Entwickler'!

Diesen Beitrag twittern

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

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

    Automatisiertes Abholen von
    E-Mails

    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/In
    fo?500000022279. (

    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

    DeleteMessage

    Kennzeichnet eine Nachricht als gelöscht. Das eigentliche Löschen wird erst durch den Aufruf der Methode EndSession durchgeführt. Parameter: Nummer der Nachricht

    EndSession

    Beendet die Sitzung und löscht als gelöscht gekennzeichnete Nachrichten

    NumberOfMails

    Anzahl der Nachrichten, wird durch GetStatus gefüllt

    Message

    Inhalt der Nachricht. Wird durch die Methode ReadMessage gefüllt

    Tab. 2: Methoden der Klasse für die Verwendung des Post Office Protocols, Version 3

    Die Klasse könnte man noch um einige Methoden und Eigenschaften erweitern, um beispielsweise die Größe einer einzelnen Mail zu ermitteln oder die Liste aller enthaltenen Mails inklusive Größe auszugeben. Da die POP3-Klasse aber nur für den Abruf automatisch generierter Mails gedacht ist, deren Größe vermutlich immer gleich und daher uninteressant ist, verzichten wir an dieser Stelle auf weitere Elemente.

    Beispielmails verschicken

    Wenn Sie die Methoden und Eigenschaften der Klasse clsPOP3 in eigenen Anwendungen verwenden möchten, werden Sie unter Umständen den einen oder anderen Test durchführen. Tests erfordern Testdaten und in diesem Falle hilft es, wenn Sie das entsprechende Postfach mal eben mit ein paar Testmails bestücken können.

    Sie finden in den Beispieldatenbanken nicht nur die Funktionalität für die Verwendung von POP3, sondern auch eine Klasse zum Versenden von Mails via SMTP namens clsSMTP.

    Die Prozedur aus Quellcode 1 zeigt ihre Anwendung. Sie müssen lediglich für die den Eigenschaften zugewiesenen Werte, die derzeit durch Platzhalter ersetzt werden, eigene Werte einsetzen.

    Public Sub MailSenden()

        Dim objSMTP As clsSMTP

        Set objSMTP = New clsSMTP

        With objSMTP

            .SMTPServer = "<SMTPServer>"

            .Port = 25

            .MailFrom = "<Mail Absender>"

            .MailTo = "<Mail Empfänger>"

            .Sendername = "<Name Absender>"

            .SenderEMail = "<Mail Absender>"

            .Subject = "Testmail"

            .Plaintext = "Testmail"

            .Send

        End With

    End Sub

    Quellcode 1

    Sie haben das Ende des frei verfügbaren Teils des Artikels erreicht. Lesen Sie weiter, um zu erfahren, wie Sie den vollständigen Artikel lesen und auf viele hundert weitere Artikel zugreifen können.

    Sind Sie Abonnent?Jetzt einloggen ...
     

    Kompletten Artikel lesen?

    Einfach für den Newsletter anmelden, dann lesen Sie schon in einer Minute den kompletten Artikel und erhalten die Beispieldatenbanken.

    E-Mail:

    Verwandte Beiträge:

    Google Earth ferngesteuert, Teil II

    © 2003-2015 André Minhorst Alle Rechte vorbehalten.