#!/usr/bin/perl # report a message as spam and then delete it use strict; use warnings; use Mail::Box::Manager; use Mail::Box::Mbox; my $manager = new Mail::Box::Manager; my $folder = $manager->open(access => "rw", create => 0, folder => "/home/mikel/mail/Junk"); my $corpus = $manager->open(access => "rw", create => 1, folder => "/home/mikel/back/Junk"); my $count = 0; foreach my $message ($folder->messages) { my $subject = $message->subject; # skip dummy message created by IMAP server next if $subject =~ /FOLDER INTERNAL DATA/; # skip message that's already deleted # (typically a clean message that got moved but the folder wasn't yet expunged) next if $message->isDeleted; print $subject . "\n"; if (open(BOGO, "|/usr/bin/bogofilter -s")) { $message->print(\*BOGO); } else { warn "Cannot connect to bogofilter"; } #if (open(SPAMCOP, "|/home/michael/bin/reporter.pl")) # { # $message->print(\*SPAMCOP); # } # else # { # warn "Cannot connect to SpamCop"; # } $manager->copyMessage($corpus, $message); $message->delete(); $count++; } $folder->close() or die "Cannot close mail box"; $corpus->close() or warn "Cannot close junk mail corpus"; if ($count == 1) { print STDERR "Reported 1 message\n"; } else { print STDERR "Reported $count messages\n"; } exit 0;