Re: Postfix i filtres
On Friday 19 September 2003 20:39, Francesc Alted wrote:
> Ufff... He hagut d'esborrar avui mateix més de 30 o 40 missatges del
> puto virus eixe. A 130 KB cada missatge, després d'un cap de setmana
> sense llegir el correu et quedes amb el compte bloquejat per excés de
> quota.
Com que a Ya.com han passat de mi he picat aquest script guarro en Perl
que filtra la bustia. N'estic rebent mes d'un per minut.
Es molt simple, quan l'executes fa un TOP dels missatges nous i de tots
aquells que fan mes de 150K o que tenen MS o Microsoft a les capcaleres
o en les primeres 20 linies de missatge, escriu el From i el Subject
per pantalla i et demana si tel vols carregar el missatge del servidor.
MS i Microsoft els posa en negreta + roig per a que es vegin facilment
en el dialeg.
Si aneu a dormir podeu modificarlo facilment per a que faci el delete
sense preguntar i programar un cron.
Usa el modul Net::POP3 que podeu instalar com a root fent:
# perl -MCPAN -e 'install Net::POP3'
-- fxn
use strict;
use warnings;
use Net::POP3;
use Term::ANSIColor qw(:constants);
my $server = 'pop.example.com';
my $login = 'login';
my $password = 'password';
sub say { print @_, "\n" }
# Constructors
my $pop = Net::POP3->new($server);
if ($pop->login($login, $password) > 0) {
say "logged in";
my %msgnums = %{$pop->list}; # hashref of msgnum => size
my $nmails = scalar keys %msgnums;
foreach my $msgnum (keys %msgnums) {
my @lines = @{$pop->top($msgnum, 20)};
my ($subject) = grep /^Subject:/i, @lines;
my ($from) = grep /^From:/i, @lines;
if ($msgnums{$msgnum} > 150000 || grep /\bM(?:S|icrosoft)\b/, @lines) {
print "\n";
$from =~ s/\bM(?:S|icrosoft)\b/BOLD . RED . $& . RESET/e;
$subject =~ s/\bM(?:S|icrosoft)\b/BOLD . RED . $& . RESET/e;
print $from, $subject;
my $answer = 'n';
do {
print "delete that fucking crap? ";
$answer = <STDIN>;
chomp $answer;
} until $answer eq 'y' or $answer eq 'n';
if ($answer eq 'y') {
$pop->delete($msgnum);
--$nmails;
}
}
}
say "$nmails new mails";
} else {
say "no new mails";
}
$pop->quit;
Reply to: