Courier::Filter::Module::SpamAssassin - SpamAssassin message filter module for


Courier-Filter documentation Contained in the Courier-Filter distribution.

Index


Code Index:

NAME

Top

Courier::Filter::Module::SpamAssassin - SpamAssassin message filter module for the Courier::Filter framework

SYNOPSIS

Top

    use Courier::Filter::Module::SpamAssassin;

    my $module = Courier::Filter::Module::SpamAssassin->new(
        prefs_file  => '/etc/courier/filters/courier-filter-spamassassin.cf',
        sa_options  => {
            # any Mail::SpamAssassin options
        },

        logger      => $logger,
        inverse     => 0,
        trusting    => 0,
        testing     => 0,
        debugging   => 0
    );

    my $filter = Courier::Filter->new(
        ...
        modules     => [ $module ],
        ...
    );

DESCRIPTION

Top

This class is a filter module class for use with Courier::Filter. It matches a message if its SpamAssassin spam score exceeds the configured threshold.

Constructor

The following constructor is provided:

new(%options): returns Courier::Filter::Module::SpamAssassin

Creates a new SpamAssassin filter module.

%options is a list of key/value pairs representing any of the following options:

prefs_file

The path of a SpamAssassin preferences file. If this option is specified, its value is passed to the Mail::SpamAssassin constructor's userprefs_filename option | Mail::SpamAssassin/userprefs_filename. If undef, SpamAssassin is instructed not to read any preferences besides its default configuration files. Defaults to undef.

sa_options

A hash-ref specifying options for the Mail::SpamAssassin object used by this filter module. See new in Mail::SpamAssassin for the supported options.

All options of the Courier::Filter::Module constructor are also supported. Please see new in Courier::Filter::Module for their descriptions.

Instance methods

See "Instance methods" in Courier::Filter::Module for a description of the provided instance methods.

SEE ALSO

Top

Courier::Filter::Module, Courier::Filter::Overview.

For AVAILABILITY, SUPPORT, COPYRIGHT, and LICENSE information, see Courier::Filter::Overview.

AUTHOR

Top

Julian Mehnle <julian@mehnle.net>


Courier-Filter documentation Contained in the Courier-Filter distribution.
#
# Courier::Filter::Module::SpamAssassin class
#
# (C) 2005-2008 Julian Mehnle <julian@mehnle.net>
# $Id: SpamAssassin.pm 211 2008-03-23 01:25:20Z julian $
#
###############################################################################

package Courier::Filter::Module::SpamAssassin;

use warnings;
use strict;

use base 'Courier::Filter::Module';

use Mail::SpamAssassin;

use constant TRUE   => (0 == 0);
use constant FALSE  => not TRUE;

# Implementation:
###############################################################################

sub new {
    my ($class, %options) = @_;
    
    my $use_user_prefs = defined($options{prefs_file});
    $options{sa_options}->{userprefs_filename} = $options{prefs_file};

    my $spamassassin = Mail::SpamAssassin->new( $options{sa_options} );
    $spamassassin->compile_now($use_user_prefs);
    
    my $self = $class->SUPER::new(
        %options,
        spamassassin    => $spamassassin
    );
    
    return $self;
}

sub match {
    my ($self, $message) = @_;
    
    my $spamassassin    = $self->{spamassassin};
    my $sa_message      = $spamassassin->parse($message->text);
    my $status          = $spamassassin->check($sa_message);
    
    my $is_spam         = $status->is_spam;
    my $score           = $status->get_score;
    my $tests_hit       = $status->get_names_of_tests_hit;
    
    $status->finish();
    $sa_message->finish();
    
    return 'SpamAssassin: Message looks like spam (score: ' . $score . '; ' . $tests_hit . ')'
        if $is_spam;
    
    return undef;
        # otherwise.
}

TRUE;