2009-10-21 5 views

Répondre

6

Je l'habitude d'utiliser le following script pour filtrer SpamAssassin battant pavillon e-mail avant FAI commutation:

#!/usr/bin/perl 

use strict; 
use warnings; 

$| = 1; 

use constant SEVERITY => 5; 

use Mail::POP3Client; 
use Term::ReadKey; 

my $user = shift; 

my $pop = Mail::POP3Client->new(
    HOST => '127.0.0.1', 
    PORT => 9999 
); 

my $pass = prompt_password(); 
print "\n"; 

$pop->User($user); 
$pop->Pass($pass); 
$pop->Connect or die $pop->Message; 

my $count = $pop->Count; 

$count >= 0 or die "Failed to get message count.\n"; 
$count > 0 or die "No messages in mailbox.\n"; 

my @to_delete; 

print "Scanning messages: "; 

my $to_delete = 0; 
for my $msg_num (1 .. $count) { 
    my @headers = $pop->Head($msg_num); 

    for my $h (@headers) { 
     if($h =~ /^X-Spam-Level: (\*+)/) { 
      if(SEVERITY <= length $1) { 
       $to_delete += 1; 
       $pop->Delete($msg_num); 
       print "\b*>"; 
      } else { 
       print "\b->"; 
      } 
     } 
    } 
} 

print "\b ... done\n"; 

use Lingua::EN::Inflect qw(PL); 

if($to_delete) { 
    printf "%d %s will be deleted. Commit: [Y/N]?\n", 
     $to_delete, PL('message', $to_delete); 
    $pop->Reset unless yes(); 
} 

$pop->Close; 

print "OK\n"; 

sub yes { 
    while(my $r = <STDIN>) { 
     $r = lc substr $r, 0, 1; 
     return 1 if $r eq 'y'; 
     next unless $r eq 'n'; 
     last; 
    } 
    0; 
} 

sub prompt_password { 
    print 'Password: '; 
    ReadMode 2; 
    my $pass = ReadLine 0; 
    ReadMode 0; 
    chomp $pass; 
    return $pass; 
} 

Il est trivial de changer cette façon, il enregistre les messages. Voir Mail::POP3Client.

+0

Merci beaucoup, je vais étudier ce code! –

3

La réponse à presque toute question est "Trouver le bon module sur CPAN Search".

La plupart des modules sont accompagnés d'exemples dans la documentation et les tests.

Bonne chance, :)

+0

Merci beaucoup! –

+1

Alors que je suis d'accord avec la «réponse» est-ce vraiment une réponse? Il aurait dû chercher le CPAN, mais ne devrions-nous pas, pour faire SO complète et popper, au moins fournir un ensemble fonctionnel de modules qu'il pourrait employer? Je pensais juste que c'était une règle de SO que vous ne liez pas aux moteurs de recherche? Je pourrais toutefois avoir tord. –

+0

Je l'ai lu comme un "RTFM" plus poli. Bien que la RTFM soit évidente, tout le monde ne connaît pas le CPAN (ou à quel point il est expansif). – Ether

Questions connexes