Я использую канал через 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
вариант в качестве подстраховки отладки.
(Я ценю, что у вас уже есть ответ, но подумал, что это может быть полезно в качестве альтернативы для всех, кто найдет этот вопрос)