Per Perl POP3-Konten prüfen
POP3-Konten per Perl prüfen
Manchmal ist es unter Linux hilfreich, POP3-Konten automatisch zu prüfen. Dafür gibt es eine eigene POP3-Client-Bibliothek, welche sogar verschlüsselte Verbindungen beherrscht.
Das folgende Skript zeigt eine einfache Abfrage eines einzelnen POP3-Kontos. Es wird die Anzahl der Mails im Postfach ausgegeben.
Unter Debian und Ubuntu muss neben Perl selbst (standardmäßig installiert) noch folgende Bibliothek installiert sein: libmail-pop3client-perl. Diese kann wie immer mit Hilfe von sudo apt-get install libmail-pop3client-perl installiert werden.
Eine Einfache Abfrage lautet wie folgt:
- Quelltext: Alles auswählen | Zeilennummerierung an/aus
-
- #!/usr/bin/perl
- use Mail::POP3Client;
- my $host = "example.de";
- my $user = "konto\@example.de";
- my $pw = "supergeheim";
- my $pop = new Mail::POP3Client(USER => $user,
- PASSWORD => $pw,
- HOST => $host,
- USESSL => 1);
- $pop->Close();
Man kann das Skript auch als Dienst/Daemon laufen lassen, um periodisch die Füllung des E-Mail-Postfachs ausgeben zu lassen:
Per Perl POP3-Konten prüfen: Listing 2
- Quelltext: Alles auswählen | Zeilennummerierung an/aus
-
- #!/usr/bin/perl
- use Mail::POP3Client;
- my $host = "example.de";
- my $user = "konto\@example.de";
- my $pw = "supergeheim";
- my $intervall = 60 * 5; #alle 5 Minuten
- while (1) { #so lange laufen lassen, bis Prozess beendet wird
- my $pop = new Mail::POP3Client(USER => $user,
- PASSWORD => $pw,
- HOST => $host,
- USESSL => 1);
- $pop->Close();
- }
- 6 Kommentare
K1
Nettes Beispiel, verständlich und funktioniert.
Was mir aber noch fehlt ist wie man den Body ausliest.
Re: K1
Hallo Peter,
ist auch recht einfach und steht in der Dokumentation des POP3Client:
http://search.cpan.org/~sdowd/Mail-POP3Client-2.16/POP3Client.pm
Die relevanten Methoden sind: Body, BodyToFile, HeadAndBody oder HeadAndBodyToFile.
Max.
K2
Das Handling scheint mir nicht so leicht von der Hand zu gehen, wie es die Beschreibung vermuten lässt.
Es war mir bisher nur über ein Array möglich Subject und From in einer Variablen ab zu speichern. Skalare mit $ wurden stets mit dem Wert 1 gefüllt.
Das schwerwiegendere Problem ist aber, dass zwischen new und $pop->Close(); sich kaum Befehle ausführen lassen. Weder push/pop noch ein einfacher print-Befehl (print "xyz";) wollen dazwischen funtionieren.
Re: K2
Hm... ok, ich habe das selbst noch nicht weiter ausprobiert... Da kann ich dir im Moment jetzt auch nicht weiterhelfen.
Die Zeile "print "Anzahl der Mails (".localtime()."): ".$pop->Count()."\n"; funktioniert bei dir auch nicht? Diese liegt ja zwischen new und Close...
Max.
K3
Die '"print" Anzahl der Mails' Zeile funktioniert erstaunlicher Weise.
Leider habe ich noch nicht herrausgefunden nach welchen Kriterien Befehle weggelassen oder ausgeführt werden.
Re: K3
Was bedeutet denn "kaum Befehle ausführen" zu können? Kommt eine Fehlermeldung, ein Timeout, Segmentation Fault,...? Vielleicht hilft dir bei der Analyse auch ein Betrachter für Netzwerkpakete wie Wireshark. Damit kannst du prüfen, was das Programm tatsächlich macht.
Max.