in reply to Using Mail::Audit and Mail::SpamAssassin together

I find that Mail::Audit and Mail::SpamAssassin work well together. Here is my filter code (for a kmail client):
#!/usr/bin/perl # # A cutsom filter to process my email use Mail::Audit; open LOG, ">>/home/kvale/.audit_log"; print LOG localtime() . ": "; my $item = Mail::Audit->new( nomime => 1 ); my $subject = $item->subject(); if ($item->subject =~ /\[SPAM\s+\?\]/i) { print LOG "phy spam: $subject\n"; $item->print_out(); } use Mail::SpamAssassin; my $mail = Mail::SpamAssassin->new(); my $status = $mail->check( $item ); if ($status->is_spam()) { $item->replace_header( subject => '***SPAM***' . $subject); my @report = split /\n/, $status->get_report(); shift @report until $report[0] =~ /^Content analysis/; print LOG "SA Spam: $subject\n", join "\n", @report, "\n"; $item->print_out(); } print LOG "OK: $subject\n"; $item->print_out();
Note that M::SA methods work nicely with M::A objects.

It is not true that new tests cannot be written into SpamAssassin. Look in the rules directory for info, write some yourself, and put them in your .cf file. If your rules need more than the builtin methods can offer, it is pretty simple add your own module with the custom code. If you don't want to do that much hacking, SA 3.0.0 will have a plugin framework for these sorts of expansion needs.

-Mark

Replies are listed 'Best First'.
Re: Re: Using Mail::Audit and Mail::SpamAssassin together
by Corion (Patriarch) on Apr 26, 2004 at 20:35 UTC

    I first thought that as well, but using the nomime => 1 option to Mail::Audit removes all possibility of checking the MIME attachments of a mail, and also removes the implicit capability of easily checking Base64-encoded HTML content - which is one major misfeature of SpamAssassin, as it can't detect HTML tags such as <oprah><spam><filler> as invalid.

    Writing my own rules via a .cf file is good as long as I am content with what SpamAssassin has to offer within its framework, that is, content checking on non-decoded or already-cleaned content, with all HTML tags removed.

    I did not find an easy way to simply supply a module that injected a function into the SpamAssassin::NoMailAudit namespace (or wherever else) and then to use that function as a test from within a .cf rule.