#!/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 'wanted_sub' => \&wanted, 'result_sub' => sub {}, } ); push ( @ARGV, '-' ) if ( !@ARGV ); foreach ( @ARGV ) { # try to figure out the format unless (/:[a-z]+:/) { if (-d $_) { $_ = ":dir:$_"; } else { $_ = ":mbox:$_"; } } } my $sa = new Mail::SpamAssassin(); # Go run the messages! $iter->run(@ARGV); sub wanted { #die $Mail::SpamAssassin::ArchiveIterator::MESSAGES,"\n"; my $name = $_[1]; my $dataref = $_[3]; #print "$name\n"; #return; my $msg = $sa->parse($dataref, 0); # print "$name ",$msg->header('Subject'),"\n"; #print join("", @{$msg->get_rendered_body_text_array()}),"\n"; #print join("", map { ">>> $_ <<<" } @{$msg->get_decoded_body_text_array()}),"\n"; #print "\n\n"; #print join("", map { ">>> $_ <<<" } @{$msg->get_visible_rendered_body_text_array()}),"\n"; use Data::Dumper; print Dumper($msg); $msg->finish(); }