У меня очень простая конфигурация Exim, которая просто пересылает всю почту на набор адресов назначения. В случае сбоя немедленной доставки на адрес сообщение добавляется в очередь (а затем обрабатывается правилами повтора). Я хочу изменить это так, чтобы в случае сбоя немедленной доставки выводилось сообщение: blackhole: d. (Ничего страшного, если вместо этого будет сгенерирован отскок, я просто перенаправлю отскок на: blackhole :).
Это должно происходить как при временных отказах (например, 4xx), так и при постоянных (например, 5xx).
Я понимаю, что это означает, что если доставка не может быть осуществлена немедленно, сообщение будет безвозвратно и безвозвратно потеряно. В данном конкретном контексте это не проблема.
Читая это, это звучит подозрительно, как «как мне улучшить мой спамерский сервер Exim». На самом деле это не то, для чего это нужно, и если вы придумаете, как я могу это доказать, я буду счастлив!
Задайте для повтора что-то абсурдно долгое, cron скрипт для извлечения идентификаторов сообщений из exim -bpu
в очереди больше длины x, затем удалите с помощью exim -Mrm <msgid>
В качестве альтернативы вы можете запустить exim как демон без очереди с mua_wrapper = true
. Посмотрите Раздел 48 «Использование Exim в качестве клиента без очереди», он может сделать то, что вам нужно.
Когда доставка не удалась, сообщение об ошибке записывается в стандартный поток ошибок (а также в журнал eximʻa), и exim выходит к вызывающему со значением кода очереди 1. Сообщение удаляется из файлов спула eximʻa. Сообщения о недоставке никогда не генерируются.
Данные повтора не поддерживаются, и все правила повтора игнорируются.
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 снова поместит сообщение в очередь, но при повторной попытке обработки оно будет отброшено.