Назад | Перейти на главную страницу

Spamassassin: проверить почтовый ящик на спам

Как сделать так, чтобы 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();
}