Pop3-Postfach einlesen und Mails anzeigen bzw. verarbeiten
Und noch ein Beispiel aus der Praxis:
Also, Spam ist ja ein Problem, das wohl jeder kennt. Ich kriege im Moment täglich so ca. 500 Mails, davon sind mindestens 99% Spam. Es gibt zwar inzwischen gute Spamfilter, aber das Problem liegt bei mir darin, daß es inzwischen ca. 15 Minuten dauert, bis alle Mails eingelesen und gefiltert werden. Was liegt also näher, die Mails scho auf dem Server auszusortieren, so daß nur noch die wahrscheinlich Guten übrigbleiben, die dann durch den Spamfilter rattern.
Grundproblem 1: Mails per Perl einlesen
Dafür gibt es ein guten Modul, daß anscheinend auf jedem Server installiert ist. Dieses Modul heißt use Net::POP3.
Das folgende Script liest also ein Pop3-Postfach von einem Server aus:
use CGI::Carp qw(fatalsToBrowser);
use Net::POP3;
use strict;
############# Pop-Postfach einlesen
sub check_pop{ my $pop3Server = shift; my $user = shift; my $passwd = shift; my $spam = 0; my ($msgnum,$mailcontent); my ($subject,$from,$zeile); my $pop3 = Net::POP3->new($pop3Server);
print "<h1>Einloggen in $pop3Server ...</h1>\n";
if ($pop3->login($user, $passwd) > 0){ my $messagenum = $pop3->list;
my $msgnums = $pop3->list; # hashref of msgnum => size my $nummer=keys %$msgnums; print "<b>Es gibt $nummer neue Nachrichten</b><br>\n"; my $cou=0; foreach $msgnum (keys %$msgnums) {$cou++;
EOF
}
else { print "Konnte nicht in $pop3Server einloggen oder keine neue Nachricht vorhanden\n";
}
$pop3->quit();
}
Der Aufruf erfolgt per &check_pop(popserver,username,passwort);
Falls neue Email vorhanden sind, werden diese angezeigt.
Die internen Spamerkennung will ich hier allerdings nicht vorstellen, da sie fehlerhaft ist und (ist mir jedoch noch nicht passiert) auch gute Mails löschen kann. Aber aufgrund des Subjects, des Absenders und natürlcih des Inhalts der Mails kann man durchaus auf Spam schließen oder eben auch nicht.