オープンソースで迷惑メールの処理するソフトといえば SpamAssassin (直訳するとスパム暗殺者)が有名だ。何しろ spamassassin.apache.org というサイト名からも分かるとおり、Apache Foundation 謹製なのだ。
その SpamAssassin、Perl で書かれている。なので当然 Perl のライブラリが用意されており、Perl 使いの人は簡単に自身のプログラム中から呼び出すことができる。SpamAssassin 自体はメールサーバのフロントエンドで、Procmail なんかと一緒に使うことが多いだろうから、あまり自身のプログラム中から呼び出すようなことはないとは思うのだが、何かのときに役に立つかもしれないから、とりあえず以下にサンプルを載せておこう(というかこのサイトのすべての内容自体、自分のためのメモなのでご了承を)。
#!/usr/bin/perl
use Mail::SpamAssassin;
use Mail::SpamAssassin::Message;
our $MAIL_DIR = '/home/username/spam/spams';
our $SPAM_MAIL_FILE = "spam.txt";
# 迷惑メールをテキストファイルで用意、$MAIL_DIR に置く。
print "File: $SPAM_MAIL_FILE\n";
open(IN, $SPAM_MAIL_FILE) || die;
while() {
$message .= $_;
}
# print $message;
close(IN);
my $spamtest = Mail::SpamAssassin->new();
my $mail = $spamtest->parse($message);
my $status = $spamtest->check($mail);
$message = $status->rewrite_mail();
if ($status->is_spam()) {
print "status: " . $status->is_spam() . "\n";
print "----------------------\n";
print $message;
print "----------------------\n";
}
$status->finish();
$mail->finish();
基本的な使い方としては、