У меня есть Maildir с примерно 50 тысячами электронных писем, около 42 тысяч из которых являются спамом (результат того, что мой домен и электронная почта не использовались и не использовались в течение 2 лет).
У меня есть следующий сценарий, чтобы попытаться отфильтровать спам:
#!/bin/sh
for email in "$@"; do
if ! spamassassin -e < "$email" > /dev/null 2>&1; then
mv "$email" /tmp/spam
fi
done
Но это занимает навсегда!
Устройство, на котором я могу это делать, ограничено, это NAS с процессором arm ... но все же!
Есть ли способ сделать это быстрее? На данный момент работает над поддиректором с 1000 файлами, идет почти 12 часов и обнаружено 36 спам-сообщений ...
Вы можете начать spamd
демон в режиме «только локальные тесты» и тестовые сообщения с использованием spamc
команда. Это должно устранить огромную часть spamassassin
инициализация например парсинг perl и файлов конфигурации.
Проведение сетевых тестов для большого количества старых сообщений (возрастом до двух лет) неэффективно с точки зрения затрат и времени, ИМХО.
AFAIR на моем старом ноутбуке, обрабатывающем одно сообщение в «только локальном режиме», занимает около 0,3 секунды спама (три сообщения в секунду или 10_000 сообщений в час), обработка одного сообщения в «сетевом режиме» обычно занимает 5-7 секунд при использовании мобильного широкополосного соединения. Было бы неплохо провести несколько сетевых тестов параллельно во время массовых проверок.
Вы найдете сводка тем, связанных с производительностью, в руководстве по spamasassin.
#!/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