Как заставить Postfix запускать скрипт каждый раз, когда возникает ошибка исходящей доставки?

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

Например, мой веб-сервер отправляет электронные письма, а иногда почтовый ящик получателей переполнен или отсутствует:

(host mx2.seznam.cz [77.75.76.32] сказал: 450 5.1.1 Почтовый ящик в настоящее время отключен. (В ответ на команду RCPT TO))

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

Можно ли получить postfix для вывода всей этой информации (адрес электронной почты, ошибка SMTP) во внешний сценарий по мере их появления?

Спасибо.

1 ответ

Я закончил тем, что перенаправил уведомления почтового журнала rsyslog через UDP простому демону php для обработки и выполнения всей магии там.

Bounce-daemon.php контролируется monit, поэтому он всегда включен и работает.

rsyslog.conf:

# Forward postfix logs via UDP 
mail.*                                                  @127.0.0.1:55515

Колбаситься daemon.php:

$socket = stream_socket_server("udp://127.0.0.1:55515", $errno, $errstr, STREAM_SERVER_BIND);
if (!$socket) {
    die("$errstr ($errno)");
}

do {

    //  echo "Waiting for data... ";
    $pkt = stream_socket_recvfrom($socket, 10000, 0, $peer);

    // do processing here
    echo "$pkt\n";

} while ($pkt !== false);
Другие вопросы по тегам