| 
12.02.2010
 | 
13:08

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
  1. #!/usr/bin/perl
  2.  
  3. use Mail::POP3Client;
  4.  
  5. my $host = "example.de";
  6. my $user = "konto\@example.de";
  7. my $pw = "supergeheim";
  8.  
  9. my $pop = new Mail::POP3Client(USER => $user,
  10.         PASSWORD => $pw,
  11.         HOST     => $host,
  12.         USESSL   => 1);
  13. print "Anzahl der Mails: ".$pop->Count()."\n";
  14. $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
  1. #!/usr/bin/perl
  2.  
  3. use Mail::POP3Client;
  4.  
  5. my $host = "example.de";
  6. my $user = "konto\@example.de";
  7. my $pw = "supergeheim";
  8. my $intervall = 60 * 5; #alle 5 Minuten
  9.  
  10. while (1) { #so lange laufen lassen, bis Prozess beendet wird
  11.     my $pop = new Mail::POP3Client(USER => $user,
  12.             PASSWORD => $pw,
  13.             HOST     => $host,
  14.             USESSL   => 1);
  15.     print "Anzahl der Mails (".localtime()."): ".$pop->Count()."\n";
  16.     $pop->Close();
  17.     sleep($intervall);
  18. }
  •  
  • 6 Kommentare
  •  
Gravatar: PeterPeter
14.04.2010
23:22

K1

Nettes Beispiel, verständlich und funktioniert.

Was mir aber noch fehlt ist wie man den Body ausliest.

Gravatar: MaxMax
15.04.2010
18:26

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.

Gravatar: PeterPeter
19.04.2010
13:50

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.





Gravatar: MaxMax
19.04.2010
15:00

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.

Gravatar: PeterPeter
19.04.2010
15:26

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.

Gravatar: MaxMax
19.04.2010
15:37

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.

Mein Kommentar
Ich möchte über jeden weiteren Kommentar benachrichtigt werden.

Zurück