如何让 Postfix 在每次出现传出传送错误时运行脚本?

如何让 Postfix 在每次出现传出传送错误时运行脚本?

我希望 postfix 每次出现传出传送错误时运行外部 php 脚本(一个钩子)。

例如,我的网络服务器发送电子邮件,有时收件人的邮箱已满或不存在:

(主机 mx2.seznam.cz[77.75.76.32] 说:450 5.1.1 邮箱当前已被禁用。(回复 RCPT TO 命令))

我想通过脚本捕获这些错误并通知我的用户他需要在我们的系统中更新他的电子邮件地址。

是否可以让 Postfix 将所有这些信息(电子邮件地址、SMTP 错误)转储到外部脚本中?

谢谢。

答案1

我最终通过 UDP 将 rsyslog maillog 通知重新路由到一个简单的 php 守护进程进行处理并在那里完成所有神奇的操作。

bounce-daemon.php 由 monit 控制,因此它始终处于运行状态。

rsyslog.conf:

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

反弹-守护进程.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);

相关内容