Заголовки 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
Другие вопросы по тегам