当我在电子邮件上运行 spamassassin 命令时,它会正确识别该电子邮件为垃圾邮件,并且看起来好像已添加标题。但文件实际上并未更新,标题保持不变。由于我在这里的声誉,我无法发布命令的实际输出。任何帮助都值得感激。谢谢。
开始,/etc/spamassassin/local.cf 有“report_safe 0”
基本上,我在一封电子邮件上运行以下命令,作为示例。
mike@servo:/mnt/filestore/mail/mike$ spamassassin INBOX/cur/1476677884_0.3597.servo\,U\=678\,FMD5\=7e33429f656f1e6e9d79b29c3f82c57e:2\,
其结果包括可见的 X-Spam 标头的整封电子邮件。本例中以“X-Spam-Status: Yes, score=24.0 required=5.0”为例。
然后我只需使用“more”即可查看文件。但是看不到 X-Spam 标头。什么都没有改变。
mike@servo:/mnt/filestore/mail/mike$ 更多 INBOX/cur/1476677884_0.3597.servo\,U\=678\,FMD5\=7e33429f656f1e6e9d79b29c3f82c57e:2\,
编辑:我还想指出,使用 spamc 命令而不是 spamassassin 会导致相同的结果。除非我完全误解了它应该如何运行 - 命令应该实际写入文件而不仅仅是输出结果,对吗? - 那么这可能是权限问题?看来使用 spamassassin 安装的用户是 debian-spamd,我的所有邮件都存储为 -rw-rw-r-- mike:mike。但是,我找不到任何日志来证明权限错误。
答案1
当您抓取的输出时spamassassin
,它会将您的消息输出到 STDOUT,而不是原始文件。
这是因为spamassassin
通常通过 STDIN 接收消息,例如当它被用作 Postfix 的筛选器时。Postfix 通过 STDIN 将消息传递给spamassassin
,后者将其输出到 STDOUT 到下一个进程,因此如下所示:
[email] -> `spamassassin` / `spamc` ---[spam-sorted email]---> `somethingelse`
如果您想保存文件,您需要像这样写入:
spamassassin mail.eml > mail-spamcheck.eml
答案2
对于任何可能偶然发现这篇文章并有类似问题的人,下面是我解决这个问题的方法。我从 offlineimap 移至 fetchmail,以便将消息弹出到单独的目录中,并将以下脚本添加到 cron。
#!/bin/bash
#Mail directories. Do not include the trailing /.
NEWMAIL="/home/mike/.mailqueue"
INBOX="/mnt/filestore/mail/mike/INBOX/new"
JUNK="/mnt/filestore/mail/mike/.Junk/new"
#fetch new messages
fetchmail
#move any messages in new to cur
echo "Moving messages in /new to /cur"
mv $NEWMAIL/new/* $NEWMAIL/cur/
#check if directory contains files
if [ "$(ls -A $NEWMAIL/cur/)" ] ; then
#move out files that already have spamassassin headers to the INBOX and Junk folders
echo "Moving pre-processed files."
grep -lIZ ^X-Spam-Status\:\ Yes \
$NEWMAIL/cur/* |
xargs -I '{}' -0 mv '{}' $JUNK/
grep -lIZ ^X-Spam-Status\:\ No \
$NEWMAIL/cur/* |
xargs -I '{}' -0 mv '{}' $INBOX/
#run spamassassin on each remainining file and append .processed to the filename
for file in $NEWMAIL/cur/*
do
echo "Processing $file"
spamassassin $file > $file.processed
done
#move the processed files to the INBOX and Junk folders
echo "Moving processed files."
grep -lIZ ^X-Spam-Status\:\ Yes \
$NEWMAIL/cur/* |
xargs -I '{}' -0 mv '{}' $JUNK/
grep -lIZ ^X-Spam-Status\:\ No \
$NEWMAIL/cur/* |
xargs -I '{}' -0 mv '{}' $INBOX/
#delete the remaining files
echo "Deleting the remaining files."
rm -Rf $NEWMAIL/cur/*
#no files in directory
else
echo "Nothing to do."
fi