#!/usr/bin/perl use lib $ENV{'HOME'}.'/SA/spamassassin-head/lib'; # Requires SpamAssassin 3.x modules use Mail::SpamAssassin; use Mail::SpamAssassin::ArchiveIterator; use Mail::SpamAssassin::Message; use Mail::SpamAssassin::PerMsgStatus; use Mail::SpamAssassin::Util; # Usage: $0 [mbox or maildir] ... # no argument or "-" will take input from STDIN # argv in mass-check format, so it'll also accept: # :mbox:/path/to/file # :dir:/path/to/maildir # Everything below here needs ArchiveIterator ... my $iter = new Mail::SpamAssassin::ArchiveIterator( { 'opt_j' => 0, # do it all in memory 'opt_n' => 1, # don't bother sorting 'opt_all' => 1, # grab all mails } ); $iter->set_functions( \&wanted, sub { } ); push ( @ARGV, '-' ) if ( !@ARGV ); foreach ( @ARGV ) { # try to figure out the format unless (/:[a-z]+:/) { if (-d $_) { $_ = ":dir:$_"; } else { $_ = ":file:$_"; } } } my $sa = new Mail::SpamAssassin(); # Go run the messages! eval { $iter->run(@ARGV); }; sub wanted { print "$_[1] $_[2]\n"; }