Возможно ли отключить механизм повтора в exim
У меня очень простая конфигурация exim, которая просто пересылает всю почту на набор адресов назначения. Если немедленная доставка по адресу не удалась, сообщение добавляется в очередь (и затем обрабатывается по правилам повтора). Я хочу изменить это так, чтобы в случае немедленной доставки произошла ошибка: blackhole: d. (Это нормально, если вместо этого генерируется отскок, так как я просто перенаправлю отскок на:blackhole:).
Это должно происходить как для временных сбоев (например, 4xx), так и для постоянных (то есть 5xx).
Я понимаю, что это означает, что если доставка не может быть выполнена немедленно, сообщение будет окончательно и безвозвратно потеряно. В этом конкретном контексте это не проблема.
Читая об этом, это звучит подозрительно, как "как я могу улучшить мой спам сервер Exim". Это действительно не то, для чего это нужно, и если вы сможете найти способ, которым я могу это доказать, я с удовольствием это сделаю!
2 ответа
Повторите попытку до чего-то нелепо длинного, cron скрипт для извлечения идентификаторов сообщений из exim -bpu
в очереди больше длины x, затем удалить с exim -Mrm <msgid>
Вы также можете запустить exim как демон без очереди с помощью mua_wrapper = true
, Посмотрите на Раздел 48 "Использование Exim как клиента без очереди", он может сделать то, что вам нужно.
Когда доставка завершается неудачно, сообщение об ошибке записывается в стандартный поток ошибок (а также в журнал exim), и exim выходит к вызывающей стороне со значением кода поворота 1. Сообщение удаляется из файлов спула exim. Никакие отказов сообщения никогда не генерируются.
Данные повторов не поддерживаются, а любые правила повторов игнорируются.
Exim имеет расширенную конфигурацию для настройки времени повторов. В вашем exim.conf будет раздел повторных попыток внизу. Конфигурация повтора состоит из трех полей: адреса электронной почты, кода ошибки, вызывающего ошибку, и списка шаблонов синхронизации. Они определяются как группа из трех чисел: буквенный код поведения, интервал времени для применения этого правила и интервал для повторной попытки. Например:
F,2h,15m
можно прочитать как "В течение 2 часов, попробуйте фиксированный внутренний каждые 15 минут",
Вы можете попробовать установить пустую повторную попытку:
begin retry
* *
Вполне возможно, что exim это расстроит. Вместо этого вы можете использовать одну повторную попытку:
begin retry
* * F,1m,1m
Это не совсем то, что вы просили, но это довольно близко.
Есть также варианты его изменения для определенных адресов электронной почты и для разных кодов возврата.
Вы можете установить
system_filter
в вашем exim.conf. После этого в файле системного фильтра конфигурации создайте такое правило:
if not first_delivery then
seen finish
endif
После первой доставки exim снова поместит сообщение в очередь, но при повторной попытке обработки оно будет отброшено.