[repost] POP3 client, in perl

Il codice che segue, torna utile per tutti quegli account che ci si ritrova, con poca capacità di gestione (leggi che hanno webmail discutibili), e che non avete mai avuto la voglia, o l’interesse di configurare seriamente nel vostro client di posta preferito.

Il caso lampante, è la mail assegnata d’ufficio dal gestore telefonico, ad esempio.

Ho scritto al volo questo codice per cancellare i 1000 e rotti messaggi giacenti (onde evitare che un “invia ricevi” dal telefonino si traducesse in una strenna natalizia per il mio gestore telefonico), e poi, l’ho ritoccato un istante, per dargli una parvenza d’interfaccia. Si può evolvere, anche se ha senso il giusto (se vi serve un client vero, conviene configurarne uno esistente, si fa prima), ma per scriptare  un mass delete, può essere utile.

Bando alle ciance, il codice:


use Net::POP3;

use strict;

# configure this!!!

my $host = 'popmail.server.provider';

my $user = 'username@provider';

my $pass = 'password';

# end configure

my $opt = shift;

if (!defined($opt)) {
printf ("usage: \n");

printf (" list: show subject messages\n");

printf (" del: delete all messages\n");

exit;

}

my $pop = Net::POP3->new($host) || die "Can't connect to $host\n";

$pop->login($user,$pass) || die "Can't authenticate. Check your information\n";

my @stat = $pop->popstat();

my $kb = $stat[1]/1000;

print "you have $stat[0] message\n";

print "and $kb Kbytes disk usage\n";

if ($opt eq "del") {
my $msgnums = $pop->list;

foreach my $msgnum (keys %$msgnums) {
$pop->delete($msgnum);

}
} else {
my $msgnums = $pop->list;

foreach my $msgnum (keys %$msgnums) {
my $msg = $pop->get($msgnum);

my @sbj = grep {/^Subject/} @$msg;

print @sbj;

}
}

$pop->quit;

if ($opt eq "del") {
print "deleted $stat[0] message\n";

}
print "done.\n";

Manco a dirlo, le tre variabili $host, $user, e $pass vanno acconciate all’abbisogna. Ho un pò truccato rispetto al parametro da passare: in realtà qualunque parametro produce un listing tranne quello di cancellazione.

Produce un risultato di tipo:


mizio@haziel:~$ perl cleanvoda.pl list
you have 0 message
and 0 Kbytes disk usage
done.
mizio@haziel:~$ perl cleanvoda.pl del
you have 0 message
and 0 Kbytes disk usage
deleted 0 message
done.

Leave a Reply

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

Questo sito usa Akismet per ridurre lo spam. Scopri come i tuoi dati vengono elaborati.