Как заставить 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);