
メールを受信したときにスクリプトを実行するように postfix を設定しました。スクリプトは、postfix でメールを受信するたびにトリガーされます。ただし、問題は、postfix のアクセス ファイルに追加した 1 つのアカウントだけではなく、すべてのメール アカウントでトリガーされることです。これが私の設定です。 マスター.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
そしてこれが私のメイン.cfファイル:
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
更新: これには2つのアプローチがあることがわかりました
アプローチ1
作成する交通マップ:
/^robot@domain/ myhook:dummy /.*/ :
これにより、robot@domain 宛てのメールはすべてフックに直接送られるようになります。その他のメールは通常どおり処理されます。
修正するメイン.cfたす:
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 宛のメールがフィルターを通過するようになり、他のすべてのメールが配信されるようになります。
でメイン.cf:
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
すべてのメッセージのルーティングが変更されるため、指定してください。