Spamassasin:检查邮箱中是否有垃圾邮件

Spamassasin:检查邮箱中是否有垃圾邮件

我如何让 spamassasin 检查邮件文件夹中是否存在垃圾邮件并将其移动到另一个文件夹中。

我最近收到了很多垃圾邮件,并开始实施贝叶斯分类器。我将一堆垃圾邮件移到一个单独的文件夹中,并使用“sa-learn”对其进行训练。

现在我希望 spamassasin 使用它刚刚学到的知识并检查文件夹中的所有电子邮件是否为垃圾邮件,如果它认为是垃圾邮件,则将其移至垃圾邮件文件夹。(例如,在我的配置中,垃圾邮件级别高于 5.0。)

编辑:我正在服务器上以 maildir 格式存储我的电子邮件。

任何想法?

提前致谢

答案1

下面请查看man spamassassin和的组合示例代码man Mail::Box

经过初步测试后,在适当的位置添加$message->moveTo($destinationFolder)。当前版本仅识别超大/垃圾邮件/非正常邮件。
(请参阅man Mail::Box::MessagemoveTo 详细信息)

用法: ./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();
}

相关内容