我有一个 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 秒(通过移动宽带连接)。在大规模检查期间同时运行几个网络测试是个好主意。
#!/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