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

Как настроить Postfix для повторной отправки электронной почты, которая не была доставлена ​​по каналу?

Я использую канал через SSH для доставки некоторых электронных писем для специальной обработки на другой сервер, что я настроил в master.cf.

foobar   unix    -   n   n   -   -   pipe
  flags=RF user=foobar:foobar argv=/usr/bin/ssh -T foobar@foobar /usr/local/bin/foobar ${recipient}

Проблема, с которой я столкнулся, заключается в том, что если этот сервер недоступен (или по какой-либо другой причине соединение SSH не работает), вся доставка не выполняется, и отправитель получает сообщение об этом. Я бы хотел, чтобы в случае неудачи электронное письмо возвращалось в очередь для повторной попытки. И только если в течение нескольких дней эта доставка не производится, отправитель уведомляется об этом. Как я могу настроить Postfix таким образом?

Добавить -o soft_bounce=yes к определению в master.cf.

Пример:

foobar   unix    -   n   n   -   -   pipe
  -o soft_bounce=yes
  flags=RF user=foobar:foobar argv=/usr/bin/ssh -T foobar@foobar /usr/local/bin/foobar ${recipient}

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

Если команда, которая pipe is delivery to возвращает код выхода 75, тогда доставка будет отложена, а не отменена. В качестве альтернативы, если первая строка вывода имеет расширенный статус SMTP (например, «4.2.0»), который имеет приоритет.

Я бы заключил команду ssh в сценарий оболочки или что-то, что обнаруживает сбой и преобразует его в правильный статус вывода / выхода.

Это позволяет программе доставки помечать сообщения как недоставленные, а не постоянно повторять их. И сохраняет soft_bounce вариант в качестве подстраховки отладки.

(Я ценю, что у вас уже есть ответ, но подумал, что это может быть полезно в качестве альтернативы для всех, кто найдет этот вопрос)