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 )