#! /usr/bin/perl use Net::POP3; use File::stat; $rouge="\e[1;31m"; $jaune="\e[1;33m"; $bleu="\e[1;34m"; $bleu2="\e[0;36m"; $gris="\e[1;0m"; $nb=0; $tailleMax=100000; $CONF=$ENV{HOME}."/.scanmail.cfg"; $stat=stat($CONF) or die ("$rouge Impossible d'ouvrir le fichier $CONF $gris"); # Vérifie que l'utilisateur est propriétaire du fichier if ($stat->uid !=$<) { print "\n$rouge"."Pour utiliser le fichier $CONF, vous devez en être propriétaire !\n"; print "\nUtilisez la commande : chown $ENV{USER} $CONF\n\n$gris"; exit; } # Vérifications des droits de lecture/écriture sur le fichier if (($stat->mode & 07777) !=oct(600)) { printf ("\n$rouge Les permissions sur le fichier sont : %o\n", $stat->mode & 07777); print $gris."Changez les permissions du fichier:\n"; print "chmod 600 $CONF\n\n"; exit; } # Ouverture du fichier de configuration open (F, $CONF) || die "$rouge Impossible d'ouvrir le fichier $CONF$gris"; # lecture du fichier de configuration et récupération des valeurs while ($ligne = <F>) { if ($ligne=~ /^\s*server\s*=\s*([\w\.\-\\\/]+)/i) { $serveur[$#serveur+1]=$1; } if ($ligne=~ /^\s*user\s*=\s*([\w\.\-\\\/@]+)/) { $user[$#user+1]=$1; } if ($ligne=~ /^\s*pass\s*=\s*([\w]+)/) { $pass[$#pass+1]=$1; } if ($ligne=~ /^\s*max\s*=\s*([0-9]+)/i) { $tailleMax=$1; } } if ($#serveur!=$#user || $#serveur!=$#pass || $#user!=$#pass) { print $rouge."Il y a une erreur dans le fichier de configuration !!\n".$gris; print "Entrées trouvées:\n"; print "\t=>serveur(s): ", $#serveur+1,"\n"; print "\t=>user(s) : ", $#user+1,"\n"; print "\t=>pass : ", $#pass+1,"\n"; print "Les valeurs ci-dessus doivent être égales\n"; close(F); die; } close(F); # print "TaileMax: $tailleMax\n"; # exit; SERVEUR: foreach ( @serveur ) { $m = Net::POP3->new($serveur[$nb]); if (!$m) { print $rouge."Le serveur $serveur[$nb] ne répond pas\n$gris"; $nb++; next SERVEUR; } print "Connexion au serveur $serveur[$nb]\n"; # 2/ on fait son login, ce qui rend le nombre '$number' de mails en attente $number= $m->login($user[$nb],$pass[$nb]); if ($number eq undef) { print $rouge."Authentification refusée pour l'utilisateur $user[$nb] sur $serveur[$nb]\n".$gris; $nb++; next SERVEUR; } if ($number ne '0E0') { print "Il y a $number mail(s) en attente sur $serveur[$nb]\n"; # 3/ Affiche la taille des messages for ($i=1; $i<$number+1; $i++) { $t=$m->list($i); print $bleu."Message ", $i, ": ", $t, " octets".$gris; if ($t>$tailleMax) { $rl_msg=$m->top($i,0); # Lecture des entêtes seules $taille_header=0; # Variable pour avoir le début du message print "\n----------------\n"; $test=0; foreach $ligne (@$rl_msg) { $taille_header++; @header=split(':', $ligne); if ($header[0] eq "Subject" or $header[0] eq "From" or $header[0] eq "Content-Type" or $header[0] eq "Content-Disposition" or $test==1) { print $jaune.$ligne; #if ($header[0] eq "Content-Disposition") { $test=1; print "\nCOntent : ".$test;} #if ($test==1) { $test=0; print $test;} } } # print "\nTaille Headers=$taille_header\n"; $rl_msg=$m->top($i,10); # Récupération 10 premières lignes du message foreach $ligne (@$rl_msg) { if ($taille_header<=0) { print $bleu2.$ligne; } $taille_header--; } print $gris."----------------\n"; print "Effacer ce message [o/n]?"; $reponse=<STDIN>; if ( $reponse =~/^[oO]/) { $m->delete($i); print "Message effacé"; } else { print "Message gardé"; } print "\n"; } print "\n"; } } else { print "Aucun message !\n"; } $nb++; $m->quit(); }