У меня есть куча сообщений, которые 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 и выход с кодом ошибки)