Mail-MIMEDefang

 view release on metacpan or  search on metacpan

modules/lib/Mail/MIMEDefang/Antispam.pm  view on Meta::CPAN

# %RETURNS:
#  A Mail::SpamAssassin:PerMsgStatus object.
#  CALLER IS RESPONSIBLE FOR CALLING finish()
# %DESCRIPTION:
#  Scans message using SpamAssassin (http://www.spamassassin.org)
#***********************************************************************
sub spam_assassin_status {

    my $object = spam_assassin_init(@_);
    return unless $object;

    my $mail = spam_assassin_mail();
    return unless $mail;

    my $status;
    push_status_tag("Running SpamAssassin");
    $status = $object->check($mail);
    $mail->finish();
    pop_status_tag();
    return $status;
}

=item spam_assassin_init

Initialize Apache SpamAssassin and returns a C<Mail::SpamAssassin> object.

=cut

#***********************************************************************
# %PROCEDURE: spam_assassin_init
# %ARGUMENTS:
#  config -- optional spamassassin config file
# %RETURNS:
#  A Mail::SpamAssassin object.
# %DESCRIPTION:
#  Scans message using SpamAssassin (http://www.spamassassin.org)
#***********************************************************************
sub spam_assassin_init {
    my ($config) = @_;

    unless ($Features{"SpamAssassin"}) {
	md_syslog('err', "Attempt to call SpamAssassin function, but SpamAssassin is not installed.");
	return;
    }

    if (!defined($SASpamTester)) {
        if (!defined($config)) {
            if (-r $Features{'Path:CONFDIR'} . '/sa-mimedefang.cf') {
                $config = $Features{'Path:CONFDIR'} . '/sa-mimedefang.cf';
            } elsif (-r $Features{'Path:CONFDIR'} . '/spamassassin/sa-mimedefang.cf') {
                $config = $Features{'Path:CONFDIR'} . '/spamassassin/sa-mimedefang.cf';
            } elsif (-r $Features{'Path:CONFDIR'} . '/spamassassin/local.cf') {
                $config = $Features{'Path:CONFDIR'} . '/spamassassin/local.cf';
            } else {
                $config = $Features{'Path:CONFDIR'} . '/spamassassin.cf';
            }
        }
	push_status_tag("Creating SpamAssasin Object");
	my $sa_args = {
		local_tests_only   => $SALocalTestsOnly,
		dont_copy_prefs    => 1,
		userprefs_filename => $config,
		user_dir           => $Features{'Path:QUARANTINEDIR'},
	};
	$SASpamTester = Mail::SpamAssassin->new( $sa_args );
	pop_status_tag();
    }
    return $SASpamTester;
}

=item spam_assassin_mail

Method that calls SpamAssassin and returns
a C<Mail::SpamAssassin::Message> object.

=cut

#***********************************************************************
# %PROCEDURE: spam_assassin_mail
# %ARGUMENTS:
#  none
# %RETURNS:
#  A Mail::SpamAssassin::Message object
#***********************************************************************
sub spam_assassin_mail {

    unless ($Features{"SpamAssassin"}) {
	md_syslog('err', "Attempt to call SpamAssassin function, but SpamAssassin is not installed.");
	return;
    }

    open(my $in, "<", "./INPUTMSG") or return;
    my @msg = <$in>;
    close($in);

    # Synthesize a "Return-Path" and "Received:" header
    my @sahdrs;
    push (@sahdrs, "Return-Path: $Sender\n");
    push (@sahdrs, split(/^/m, synthesize_received_header()));

    if ($AddApparentlyToForSpamAssassin and
	($#Recipients >= 0)) {
	push(@sahdrs, "Apparently-To: " .
	     join(", ", @Recipients) . "\n");
    }
    unshift (@msg, @sahdrs);
    if (!defined($SASpamTester)) {
	spam_assassin_init(@_);
	return unless $SASpamTester;
    }
    return $SASpamTester->parse(\@msg);
}

=item md_spamc_init

Initialize Apache SpamAssassin and returns a C<Mail::SpamAssassin::Client> object.
C<md_spamc_init> and C<md_spamc_check> subs should be used only with Apache SpamAssassin
starting from version 4.0.1.

=over 4

The sub returns a Mail::SpamAssassin::Client object.



( run in 2.408 seconds using v1.01-cache-2.11-cpan-5fbc6bb55f2 )