Как сделать так, чтобы spamassasin проверял почтовую папку на спам и перемещал ее в другую.
В последнее время я получаю много спама и начал внедрять байесовские классификаторы. Я переместил пачку в отдельную папку и обучил ее с помощью sa-learn.
Теперь я хочу, чтобы spamassasin использовал то, что он только что изучил, проверял всю электронную почту в папке на предмет спама и переместил ее в папку спама, если сочтет ее спамом. (например, в моей конфигурации уровень спама выше 5.0).
РЕДАКТИРОВАТЬ: я храню свои электронные письма в формате maildir на сервере.
Любая идея?
Заранее спасибо
Ниже вы найдете объединенный пример кода из man spamassassin
и man Mail::Box
.
Добавить $message->moveTo($destinationFolder)
в соответствующих местах после первоначальных испытаний. Текущая версия просто определяет негабаритные / спам / радиолюбители.
(видеть man Mail::Box::Message
для перехода к деталям)
использование: ./scriptname maildir:/home/username/Maildir/.Folder/
#!/usr/bin/perl
use strict;
use warnings;
use utf8;
use Mail::SpamAssassin;
use Mail::Box::Manager;
my $mgr = Mail::Box::Manager->new;
my $spamtest = Mail::SpamAssassin->new();
for my $foldername (@ARGV) {
my $folder = $mgr->open(folder => $foldername, access => 'rw' ) || die;
foreach my $message ($folder->messages) {
# Print Subject: and Date: headers as progress indicators
print "Subject: ", $message->subject(),"\n";
print "Date: ", $message->head->get('Date'),"\n";
if( $message->size >= 250*1024 ) {
print "Oversized Message\n";
next;
}
my $mail = $spamtest->parse($message->string());
my $status = $spamtest->check($mail);
if ($status->is_spam()) {
# $message = $status->rewrite_mail();
print "Spam Message\n";
} else {
print "Ham Message\n";
}
$status->finish();
$mail->finish();
}
$folder->close();
}