Я хотел бы, чтобы 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);