我已将 postfix 配置为在收到电子邮件时运行脚本。只要在 postfix 上收到电子邮件,就会触发该脚本。但问题是它会在所有电子邮件帐户上触发,而不是仅在我在 postfix 的访问文件中添加的一个帐户上触发。以下是我的配置: 主配置文件
myhook unix - n n - - pipe flags=F user=www-data argv=/var/www/public_html/production/hook/hook.php ${sender} ${size} ${recipient}
smtp inet n - - - - smtpd -o content_filter=myhook:dummy
这是我的主配置文件文件:
smtpd_recipient_restrictions =check_recipient_access hash:/etc/postfix/access, permit_sasl_authenticated,permit_mynetworks,reject_unauth_destination
这是我的访问文件的内容:
robot@domain FILTER myhook:dummy
完成上述更改后,我运行:
postmap access
postfix reload
仍然所有的电子邮件都被路由到该脚本,而不仅仅是发送到 robot@domain 的电子邮件
我错过什么了吗?我已按照本教程进行配置:
https://thecodingmachine.io/triggering-a-php-script-when-your-postfix-server-receives-a-mail
答案1
更新:我发现有两种方法可以解决这个问题
方法 1
创造运输地图:
/^robot@domain/ myhook:dummy /.*/ :
这将强制所有发往 robot@domain 的邮件直接进入钩子。其他邮件则照常处理。
调整主配置文件加上:
transport_maps = regexp:/etc/postfix/transport_maps
别忘了postmap /etc/postfix/transport_maps
跑步postfix reload
方法 2
限制:通过本地传输传递到 robot@domain 的邮件将不会被过滤
我通过使用收件人访问像这样的文件(注意我使用的是正则表达式语法):
/^robot@domain$/ FILTER myhook:dummy /.*/ OK
这将强制发送至 robot@domain 的电子邮件通过过滤器,并允许传递所有其他电子邮件。
在主配置文件:
check_recipient_access = regexp:/etc/postfix/recipient_access
最后主配置文件:
smtp inet n - y - - smtpd -o smtpd_recipient_restrictions=$check_recipient_access
做不是指定-o content_filter=webhook:dummy
,因为这会改变所有消息的路由。