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

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

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

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

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

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

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

Спасибо.

Я закончил тем, что перенаправил уведомления почтового журнала 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);