
我已將 postfix 設定為在收到電子郵件時執行腳本。每當 postfix 收到電子郵件時,就會觸發該腳本。然而問題是它是在所有電子郵件帳戶上觸發的,而不是僅在我在 postfix 的存取文件中新增的一個帳戶上觸發的。這是我的配置: 大師.cf
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
仍然所有電子郵件都被路由到該腳本,而不僅僅是那些發送到 robots@domain 的電子郵件
我錯過了什麼?我已經按照本教學進行配置:
https://thecodingmachine.io/triggering-a-php-script-when-your-postfix-server-receives-a-mail
答案1
更新:我發現有兩種方法可以解決這個問題
方法一
創造交通地圖:
/^robot@domain/ myhook:dummy /.*/ :
這會強制任何發送到 robots@domain 的郵件直接進入鉤子。其他任何事情都按正常方式處理。
調整主文件加上:
transport_maps = regexp:/etc/postfix/transport_maps
不要忘記postmap /etc/postfix/transport_maps
跑步postfix reload
方法2
限制:透過本機傳輸傳送至 robots@domain 的郵件將不會被過濾
我通過使用一個來讓它工作收件者存取權限像這樣的檔案(注意我使用的是正規表示式語法):
/^robot@domain$/ FILTER myhook:dummy /.*/ OK
這將強制電子郵件透過過濾器發送至 robots@domain,並允許發送所有其他電子郵件。
在主文件:
check_recipient_access = regexp:/etc/postfix/recipient_access
最後在大師.cf:
smtp inet n - y - - smtpd -o smtpd_recipient_restrictions=$check_recipient_access
做不是指定-o content_filter=webhook:dummy
,因為這會更改所有訊息的路由。