blob: 681314cbde477ff747c966de0145e443bfb46c71 [file] [log] [blame]
=head1 testplugin.pm
To try this out, write these lines to /etc/mail/spamassassin/plugintest.cf:
loadplugin myTestPlugin
header MY_TEST_PLUGIN eval:check_test_plugin()
=cut
package myTestPlugin;
use Mail::SpamAssassin::Plugin;
use Mail::SpamAssassin::Logger;
use strict;
use bytes;
our @ISA = qw(Mail::SpamAssassin::Plugin);
# constructor: register the eval rule
sub new {
my $class = shift;
my $mailsaobject = shift;
# some boilerplate...
$class = ref($class) || $class;
my $self = $class->SUPER::new($mailsaobject);
bless ($self, $class);
# the important bit!
$self->register_eval_rule ("check_test_plugin");
$self->register_eval_rule ("check_return_2");
$self->register_eval_rule ("sleep_based_on_header");
print "registered myTestPlugin: $self\n";
return $self;
}
# and the eval rule itself
sub check_test_plugin {
my ($self, $permsgstatus) = @_;
print "myTestPlugin eval test called: $self\n";
print "test: plugins loaded: ".
join(" ", sort $self->{main}->get_loaded_plugins_list()).
"\n";
my $file = $ENV{'SPAMD_PLUGIN_COUNTER_FILE'};
if ($file) {
open (IN, "<$file") or warn;
my $count = <IN>; $count += 0;
close IN;
dbg("test: called myTestPlugin, round $count");
open (OUT, ">$file") or warn;
print OUT ++$count;
close OUT or warn;
}
return 1;
}
sub sleep_based_on_header {
my ($self, $permsgstatus) = @_;
my $secs = $permsgstatus->{msg}->get_header("Sleep-Time");
chop $secs;
if ($secs) {
warn "sleeping for $secs seconds...";
sleep ($secs+0);
}
return 1;
}
sub check_return_2 {
return 2;
}
sub extract_metadata {
my ($self, $opts) = @_;
my $msg = $opts->{msg};
print "myTestPlugin extract_metadata: $self\n";
$msg->put_metadata("Plugin-Meta-Test", "bar");
return 1;
}
sub per_msg_finish {
my ($self, $permsgstatus) = @_;
print "myTestPlugin finishing: $self\n";
return 1;
}
1;