나는 보내는 메일에서 데이터를 검색하고, 첨부 파일을 제거하고, CDN에 업로드하고 보내는 메일에 URL을 다시 삽입하기 위해 NodeJS에서 Postfix를 사용하여 대기열 전 필터를 구축했습니다.
Postfix가대기열 전 콘텐츠 필터.
필터를 구현하고 Postfix 문서를 따른 후에는 보내는 메일을 검색하여 Postfix로 다시 보낼 수 있습니다.
그러나 Postfix는 "프록시" 관련 구성을 통해 들어오는 메일이 대기열 전 콘텐츠 필터를 통해 다시 삽입되는 것으로 인식하지 않습니다. 여전히 대기열에 추가되어 제대로 전송되지만 처음에는 SMTP 클라이언트가 연 세션을 닫지 않습니다.
나는 몇 주 동안 이 버그를 살펴보고 답변을 찾기 위해 전체 웹을 탐색했지만 이 주제에 대한 문서는 많지 않은 것 같습니다. Milters가 문제에 대한 또 다른 해결책이 될 수 있다는 것을 알았지만 Postfix와 통신하기 위해 SMTP를 사용하는 것보다 더 복잡해 보입니다.
구성 파일은 다음과 같습니다.
master.cf:
submission inet n - - - smtpd
-o syslog_name=postfix/submissions
-o smtpd_proxy_filter=127.0.0.1:9830
-o smtpd_proxy_ehlo=mail.clebard.cloud
-o smtpd_proxy_options=speed_adjust
-o smtpd_tls_auth_only=no
-o smtpd_tls_dh1024_param_file=${config_directory}/dh2048.pem
-o smtpd_enforce_tls=no
-o smtpd_tls_security_level=may
-o smtpd_sasl_auth_enable=yes
-o smtpd_client_restrictions=permit_sasl_authenticated,reject
127.0.0.1:9821 inet n - - - smtpd -v
-o smtpd_authorized_xforward_hosts=127.0.0.0/8
-o syslog_name=postfix/afterfilter
-o smtpd_enforce_tls=no
-o smtpd_tls_auth_only=no
-o smtpd_tls_dh1024_param_file=${config_directory}/dh2048.pem
-o smtpd_enforce_tls=no
-o smtpd_tls_security_level=may
-o smtpd_sasl_auth_enable=yes
-o smtpd_client_restrictions=permit_sasl_authenticated,reject
(이 구성은 프로덕션 환경에서 사용하기에는 안전하지 않지만 최대한 복잡성을 제거하려고 노력했습니다.)
127.0.0.1:9830
는 대기열 이전 콘텐츠 필터 서버이며 127.0.0.1:9821
파일의 두 번째 구성을 사용하여 메일 반환을 수신하도록 Postfix를 구성했습니다.
다음은 필터를 사용하여 Postfix로 다시 보내는 내용입니다.
EHLO localhost
AUTH PLAIN {token}
XFORWARD HELO={client_name} NAME={client_name} ADDR={client_addr} PROTO=SMTP
XFORWARD IDENT={message_id}
MAIL FROM: {sender}
RCPT TO: {recipient}
DATA
...
.
QUIT
필터 로그에 대한 추적은 다음과 같습니다. 필터를 사용하여 메일을 보낼 때 로그를 남깁니다.
그리고 Postfix에서 제가 본 내용은 다음과 같습니다. Proxy-reject : 큐 파일 쓰기 오류
모든 명령은 필터가 명령을 보낼 때 Postfix에 의해 감지되었지만 data=0/1
원본 인바운드 메일의 응답은 데이터가 수신되지 않았음을 나타냅니다. 실제로 submission
프로세스가 프록시 콘텐츠를 대기열에 추가하려고 할 때 오류가 발생하는 것 같습니다.
이 문제에 대해서는 정말 도움이 필요하므로 모든 것을 명확하게 설명했으면 좋겠습니다.