从 maildir 中过滤垃圾邮件的快速方法?

从 maildir 中过滤垃圾邮件的快速方法?

我有一个 Maildir,里面有大约 50,000 封电子邮件,其中大约 42,000 封是垃圾邮件(这是我的域名和电子邮件保留了两年而没有使用的结果)。

我有以下脚本来尝试过滤垃圾邮件:

#!/bin/sh
for email in "$@"; do
  if ! spamassassin -e < "$email" > /dev/null 2>&1; then
    mv "$email" /tmp/spam
  fi
done

但这需要永远

我只能在其上执行此操作的设备是有限的,它是一个带有 Arm 处理器的 NAS......但仍然如此!

有没有更快的方法可以做到这一点?目前,正在处理一个包含 1000 个文件的子目录,已经进行了将近 12 个小时,发现了 36 条垃圾邮件...

答案1

您可以spamd在“仅本地测试”模式下启动守护进程并使用spamc命令测试消息。它应该可以消除大量spamassassin初始化工作,例如解析 perl 和配置文件。

我认为,对大量旧消息(长达两年之久)运行网络测试在成本/时间上并不高效。

据我所知,在我的旧笔记本电脑上,在“本地模式”下处理一条消息大约需要 0.3 秒(每秒三条消息或每小时 10_000 条消息),在“网络模式”下处理一条消息通常需要 5-7 秒(通过移动宽带连接)。在大规模检查期间同时运行几个网络测试是个好主意。

你会发现spamassin 手册中性能相关主题的摘要


#!/bin/sh
for email in "$@"; do
  # SCORE - "12.7/5.0" on success OR "0/0" on error
  SCORE=`spamc -c < "$email" > /dev/null 2>&1`
  # EXIT - 1 on spam detection, 0 on not-spam or error 
  EXIT=$?
  if [ "$EXIT" = "1" ] ; then
    mv "$email" /tmp/spam
  fi
done

相关内容