spamassassin 标头未写入

spamassassin 标头未写入

当我在电子邮件上运行 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

相关内容