ローカルSMTPサーバー経由でメールを送信するには、2つの方法があります。
- 提出ポート(例: 587、STARTTLSを使用、または465、暗黙的/即時TLSを使用)に接続して認証する => ネットワークリクエスト、
smtpdによるチェックと制限の適用 sendmailまたは類似のものを使用する。これはローカルのpickupコマンド(Postfixの場合)を呼び出し、ネットワーク接続を行わず、smtpd提出サービス用に設定されたすべてのチェックと制限をバイパスします。
後者はよりシンプルで高速であり、PHPメーラーやDiscourseが使用するこのRubyメールライブラリのような一般的なランタイムシステムやフレームワークに実装されています。また、認証はバイパスされ、プレーンテキストの資格情報をどこにも保存する必要がありません。つまり、この場合、SMTPサーバーはまったく使用されず、SMTPクライアントのみが使用されます。
確かに、Discourseが通常行うことと比較して、提出ポート接続にはサーバー負荷への顕著な影響はないはずです。後者の点は、例えば提出ポートでのsmtpd_recipient_restrictions=permit_mynetworks,permit_sasl_authenticated,rejectルールを使用して、認証を行う前にループバックIP(デフォルト、mynetworks設定)からの提出を許可することで解決できます。コンテナからのリクエストが別のIPで表示された場合、mynetworksに追加できます。以前リンクしたトピックの場合も、おそらくこのように機能していたのだと思います。
Discourseを次に更新/再構築してSMTP設定が変更されたときに確認します。動作したら報告します。
しかし、「配信方法」設定が何であるか、そして他にどのような方法があるのかを知ることは依然として興味深いです。
Postfixはコンテナ内ではなくホストで実行されますが、ネットワークベースの認証であることに変わりはないため、大きな違いはありません。
ええ、後で考えたのですが、ホスト/他のコンテナからのsendmailなどがコンテナ内で機能しないのは当然です。なぜなら、Postfixの実行可能ファイル、ライブラリ、設定の広範な部分に直接アクセスする必要があるからだと思います。もちろん、コンテナにバインドマウントできるような魔法のソケットがあれば別ですが
。