Назад | Перейти на главную страницу

Как вручную запустить exim4 для обработки и локальной доставки уже полученных сообщений

У меня есть куча сообщений, которые spamassasin сбросил из-за ошибок. (формат mbox, т.е. все заголовки конвертов начинаются с "From xxx ...")

Как я могу заставить exim доставить их (в локальные файлы спула)?

Спасибо

(exim 4.69 в Debian Linux)

Была ли ошибка в конфигурации SpamAssassin, или сообщения каким-то образом ошибочны?

Вы можете просто разделить файл на отдельные сообщения и повторно отправить их для нормальной доставки, отправив их по конвейеру sendmail -t (псевдоним Exim в системе с Exim, установленным как первичный MTA). Однако, если сообщения каким-то образом проблематичны, это не обязательно приведет вас ни к чему. Кроме того, если сообщения были изначально отправлены в список рассылки или тому подобное, это приведет к повторной отправке их в сеть, что нежелательно.

Другой вариант - использовать Python mailbox модуль для чтения в файле mbox, а затем вручную перетаскивать сообщения в соответствующие очереди; он поддерживает наиболее распространенные форматы. Учитывая достаточно подробностей, я мог бы отредактировать здесь какой-нибудь достойный пример кода.

(Python также будет работать, чтобы разделить сообщения для отправки, хотя я уверен, что поиск даст несколько десятков достаточно надежных скриптов для такого рода задач.)

В итоге я сделал это:

for f in *; do if exim4 -bm -t -i -oep <$f; then mv $f ../sent/; else mv $f ../errors/; fi; sleep 2; done

и, похоже, до сих пор он работает ... осталось около месяца сообщений или больше :). (-bm означает локальную доставку, -t означает получение получателя из заголовков сообщений, -i означает, что не нужно останавливаться на ".", а -oep означает печать ошибок в stderr и выход с кодом ошибки)