私は、送信メールからデータを取得し、添付ファイルを削除し、CDN にアップロードして、送信メールに URL を挿入するための、NodeJS 上の Postfix を使用したキュー前フィルターを構築しています。
今のところ、Postfixがこれをサポートしているので、それほど複雑なことはないと思います。キュー前コンテンツフィルター。
フィルターを実装し、Postfix のドキュメントに従った後、送信メールを取得して Postfix に送り返すことができるようになりました。
ただし、Postfix は、「プロキシ」固有の設定を介して受信されたメールが、キュー前のコンテンツ フィルタを介して挿入されたものであることを認識しません。メールはキューに追加され、適切に送信されますが、最初に SMTP クライアントによって開かれたセッションは閉じられません。
私は数週間前からこのバグに注目し、答えを求めて Web 全体を閲覧してきましたが、この件についてはあまり文書化されていないようです。Milters がこの問題の別の解決策になる可能性があると知りましたが、Postfix との通信に SMTP を使用するだけよりも複雑なようです。
設定ファイルは次のとおりです:
マスター.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
はキュー前のコンテンツ フィルタ サーバーであり、ファイルの 2 番目の構成で、返されるメールをリッスンするように 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
この件については本当に助けが必要なので、すべてを明確に説明できたことを願っています...