I have my required_score set to 15 in user_prefs.
#!/usr/bin/env perl # $Id$ # vim:ts=8 sts=4 sw=4 et ai fdm=marker: use strict; use warnings; use autodie; use Mail::IMAPClient; use Mail::SpamAssassin; $ENV{GMAIL_USER} // die "set GMAIL_USER"; $ENV{GMAIL_PASS} // die "set GMAIL_PASS"; $| = 1; my $imap = Mail::IMAPClient->new( Server => 'imap.gmail.com', User => $ENV{GMAIL_USER}, Password => $ENV{GMAIL_PASS}, Ssl => 1, Uid => 1, IgnoreSizeErrors => 1, # needed for gmail ) or die "login error: $@\n"; $imap->select('[Gmail]/Spam') or die "selecting spam: ", $imap->LastError, "\n"; my $spamtest = Mail::SpamAssassin->new(); my $uid; for $uid ( $imap->unseen ) { my $m; my $fh; $m = $imap->message_string($uid) // die $imap->LastError; my $mail = $spamtest->parse($m); my $status = $spamtest->check($mail); print "$uid: scored ", $status->get_score, "/", $status->get_required_score, "... "; if ( $status->is_spam() ) { # save message, and destroy. open( $fh, '>', $uid ); print {$fh} $m; close($fh); open( $fh, '>', $uid . ".report" ); print {$fh} $status->get_report(); close($fh); $imap->delete_message($uid) || die $imap->LastError; $imap->expunge || die $imap->LastError; print "deleted\n"; } else { # label it my $j = 5; # interval my $k = int( $status->get_score / $j ) * $j; $k = 0 if $k < 0; my $gmail_label = join( '-', 'spamass', $k, $k + $j - 1 ); $imap->create($gmail_label); # ignore error $imap->copy( $gmail_label, $uid ) || die $imap->LastError; print "labelled as $gmail_label\n"; } $status->finish(); $mail->finish(); } $spamtest->finish(); $imap->logout;
No comments:
Post a Comment