Заголовки 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: Да, оценка =24,0 требуется =5,0" в качестве примера.
Затем я просто просматриваю файл с "больше". Но заголовки X-Spam не видны. Ничего не изменилось.
mike @ servo: / mnt / filestore / mail / mike $ more INBOX / cur / 1476677884_0.3597.servo \, U \ = 678 \, FMD5 \ = 7e33429f656f1e6e9d79b29c3f82c57e: 2 \,
Изменить: я также хотел бы отметить, что использование команды spamc вместо spamassassin приводит к тому же. Если я не совсем ошибаюсь в том, как это должно себя вести - команды должны записывать файл, а не выводить результат, правильно? - тогда, возможно, это вопрос разрешения? Похоже, что пользователь, который был установлен с spamassassin- это debian-spamd, вся моя почта хранится как -rw-rw-r-- mike:mike. Однако я не могу найти никаких журналов, чтобы доказать ошибку разрешения.
2 ответа
Когда вы получаете выход для spamassassin
, он выведет ваше сообщение в STDOUT, а не в исходный файл.
Это потому что spamassassin
обычно принимает сообщения через STDIN, например, когда он используется как сито для Postfix. Postfix передает сообщение через STDIN spamassassin
кто выводит его в STDOUT для следующего процесса, так что-то вроде этого:
[email] -> `spamassassin` / `spamc` ---[spam-sorted email]---> `somethingelse`
Если вы хотите сохранить файл, вам нужно написать его примерно так:
spamassassin mail.eml > mail-spamcheck.eml
Для любого, кто может наткнуться на этот пост с подобным вопросом, ниже, как я решил эту проблему. Я переместился в 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