zurückInhaltvorwärts Perl Einführung: 12.3 Das Net::POP3 Modul

12.3 Das Net::POP3 Modul

Das Net::POP3 Modul ermöglicht auf eine einfache Art und Weise die Kommunikation mit einem POP3 (Post Office Protocol) Server um Emails skriptgesteuert zu empfangen. Auch hier ergeben sich viele Anwendungsmöglichkeiten. Der Umgang mit dem Modul setzt Grundkenntnisse des POP3 Protokolls voraus, die man sich allerdings leicht über den entsprechenden RFC 1081 aneignen kann. Dieses Modul ist objektorientiert.

Es folgt ein kleines Skript, das sich auf einen POP3 Server einloggt, die Anzahl der Emails angibt und die Betreffszeilen der Emails auf dem Bildschirm anzeigt.

use Net::POP3;
    
$user = "username";
$passwd = "passwort";
$pop3Server = "pop3.server.com";

$pop3 = Net::POP3->new($pop3Server, Timeout => 60);

print "Einloggen in $pop3Server als $user ...\n";
$messagenum = $pop3->login($user,$passwd) || die "Konnte nicht in $pop3Server einloggen"; 
print "Sie haben $messagenum Nachrichten\n\n";

# Betreffszeilen der neuen Emails werden ausgelesen und angezeigt.
# Siehe unten für eine Erläuterung dieses Code-Blocks

for ($i=1;$i<=$messagenum ;$i++) {
  $subject = $pop3->top ($i);
  foreach  $zeile (@$subject) {
    if (index($zeile,"Subject:")>=0) {
	  print "Header of message $i: $zeile\n";
	}
  }
}

$pop3->quit();

Nach der Erzeugung eines neuen POP3 Objekts in der Zeile

$pop3 = Net::POP3->new($pop3Server, Timeout => 60);

loggt sich das Skript als erstes mittels der login Methode in den POP3 Server ein, hierzu sind als Parameter Username und Passwort notwendig, die wir in Variabeln abgespeicher haben (dies ist zumindest für das Paßwort nicht empfehlenswert und sollte über eine Benutzereingabe geschehen).Die login Methode hat als Rückgabewert die Anzahl der Nachrichten auf dem Server. Diese Zahl wird in $messagenum abgespeichert und in dernächsten Zeile ausgegeben.

Im nächsten Anweisungsteil werden die Betreffszeilen der Emails auf dem Bildschirm ausgegeben. Hierbei gibt es zwei thematische Neuerung, die bisher noch nicht behandelt wurden: Der Gebrauch des index Befehls und der Gebrauch von Referenzen. Refernzen können wir leider hier nur anschneiden, jedoch werden wir demnächst ein Kapitel hierzu schreiben. Der Reihe nach geschieht folgendes:
Mittels der top Methode werden die Header der Emails vom Server gelesen. Die auf dem Server gespeicherten Nachrichten sind fortlaufend durchnumeriert (beginnend mit 1). Wir lassen eine for-Schleife die Zahlen von 1 bis $messagenum, der maximalen Anzahl der Nachrichten, durchlaufen. Die aktuelle Nachrichtenummer wird in $i zwischengespeichert. Die top Methode bekommt als Parameter die Nummer der Email ($i), deren Header gelesen werden soll.

Die top Methode liefert nun nicht wie gewohnt einen Skalaren Wert oder ein Array zurück, das den Header enthält, sondern eine Referenz, also einen Verweis, auf ein Array, welches den Header enthält. Diese Referenz wird in $subject gespeichert.

Um mittels der Array-Referenz in $subject auf die eigentlichen Array-Daten zugreifen zu können, muß man diese dereferenzieren. Dies geschieht in der foreach Schleife durch voranstellen des @ Zeichens (@$subject). Hierdurch wird dem Perl-Interpreter mitgeteilt, nicht auf die Referenz zuzugreifen, sondern auf die Daten des Arrays, auf das die Referenz in $subject verweist. Die foreach Schleife liest also das Array zeilenweise aus, die aktuelle Zeile wird in $zeile zwischengespeichert.

Nun wird überprüft, ob es sich bei der aktuellen Zeile um die Betreffszeile handelt. Hierzu benutzen wir die index Funktion. Die index Funktion ermittelt, ob in einem String (hier $zeile) ein anderer Teilstring (hier "Subject:") enthalten ist. Ist dies der Fall, gibt index die Position des Teilstrings von links zurück. Rückgabewert 0 bedeutet erste Position von links im String, 1 die zweite Position im String etc. Ist der Teilstring nicht enthalten wird -1 zurückgegeben.
Die aktuelle Zeile wird also nur ausgegeben, wenn Sie die Zeichenfolge "Subject:" enthält, welche die Betreffszeile kennzeichnet.

Für eine Dokumentation des POP3 Moduls sollte man sich die während der Installation erzeugten HTML-Seiten ansehen. Im Perl Verzeichnis existiert unter html\lib für jedes Modul eine recht ausführliche Beschreibung. Die des POP3-Moduls findet man unter html\lib\site\Net\POP3.html

Perl Einführung: Das Net::POP3 Modul zurückInhaltvorwärts