
이메일이 수신되면 스크립트를 실행하도록 postfix를 구성했습니다. postfix에서 이메일이 수신될 때마다 스크립트가 작동됩니다. 그러나 문제는 postfix의 액세스 파일에 추가한 하나의 계정이 아닌 모든 이메일 계정에서 트리거된다는 것입니다. 내 구성은 다음과 같습니다. master.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
그리고 여기 내main.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
여전히 모든 이메일은 robots@domain으로 전송되는 이메일이 아닌 해당 스크립트로 라우팅됩니다.
내가 뭐 놓친 거 없니? 구성을 위해 이 튜토리얼을 따랐습니다.
https://thecodingmachine.io/triggering-a-php-script-when-your-postfix-server-receives-a-mail
답변1
업데이트: 이에 대한 두 가지 접근 방식이 있음을 발견했습니다.
접근법 1
만들다Transport_maps:
/^robot@domain/ myhook:dummy /.*/ :
이렇게 하면 robots@domain으로 전송될 모든 메일이 곧바로 후크로 이동하게 됩니다. 다른 모든 것은 정상적으로 처리됩니다.
수정하다main.cf추가하려면:
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으로 강제 전송되고 다른 모든 이메일은 전달될 수 있습니다.
~ 안에main.cf:
check_recipient_access = regexp:/etc/postfix/recipient_access
그리고 마침내master.cf:
smtp inet n - y - - smtpd -o smtpd_recipient_restrictions=$check_recipient_access
하다~ 아니다지정 -o content_filter=webhook:dummy
하면 모든 메시지의 라우팅이 변경됩니다.