メールを送信できません - ポート465の問題

SMTP プロバイダーを変更したいのですが、サーバーがメールを送信できると確信しているにもかかわらず、うまくいかないようです。

app.yml には次のように設定しています。

  DISCOURSE_SMTP_ADDRESS: <<SMTP SERVER>>
  DISCOURSE_SMTP_PORT: 465
  DISCOURSE_SMTP_USER_NAME: <<USER>>
  DISCOURSE_SMTP_PASSWORD: <<PASSWORD>>

telnet <<SMTP SERVER>> 465 を使用すると正常に接続できますが、メールを送信しようとすると、Discourse は次のように返します。

ERROR - Net::ReadTimeout with #<Socket:(closed)>

何か設定すべき点があるか、ご存知の方はいらっしゃいますか?

このトピックに基づいてサーバーをチェックしました: Troubleshoot email on a new Discourse install

手動で実行すると、サーバーに接続してテストメールを正常に送信できるようです。

> sudo ./launcher enter app
root@support-app:/var/www/discourse# openssl s_client -connect mail.xxxxxxxx.com:465
  :
  :
  大量のジャンク
  :
  :
220 xxxxxxx.com Anti-spam GT for Coremail System (mispb-6da2110f-64b0-4d67-acf1-2d302bd594f9-xxxxxxx.com[20220915])
EHLO mail.xxxxxxxxx.com
250-mail
250-PIPELINING
250-AUTH LOGIN PLAIN
250-AUTH=LOGIN PLAIN
250-coremail 1Uxr2xKj7kG0xkI17xGrUDI0s8FY2U3Uj8Cz28x1UUUUU7Ic2I0Y2UrpDiNKUCa0xDrUUUUj
250-STARTTLS
250-SMTPUTF8
250 8BITMIME
AUTH PLAIN xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
235 Authentication successful
mail from: <xxx@xxxxxx.com>
250 Mail OK
rcpt to: <xxxx@xxxxxxx.com>
250 Mail OK
data
354 End data with <CR><LF>.
content

.
250 Mail OK queued as AQAAfwBXr9nSGHdj3hEgAA--.7073S2

出力が表示されるまでどのくらいかかりますか?

コマンドを送信してから、ほぼすぐに表示されます。

編集:エラーの原因となっているステップを特定するために、より詳細なログを取得する方法はありますか?

ホスティングプロバイダーによって送信ポートがブロックされている可能性が高いです。Mailgun(または他のほとんどのサービス)のようなサービスを使用している場合は、ポート2525で機能するはずです。自分でメールサーバーを実行している場合は、別のポート(2525など)でリッスンするように設定できます。

または(おそらく最も難しい方法ですが)、サーバーをホストしている人にチケットを送信して、ポートを開くように依頼することもできます。

さて、./launcher enter app を実行し、次に openssl でメールサーバーに接続し、SMTP でログインして、Discourse コンテナ内から正常にメールを送信できることを考えると、ポートが機能しないとは考えにくいです…

「いいね!」 2

コードをトレースしたところ、EHLO に到達すらしていないようです。SMTPサーバーには接続されていますが、SSLハンドシェイクが欠落しているため、サーバーが終了し、Discourse は応答を受け取れず、エラーが発生しました。

そのため、ポート 465 のサポートにバグがあるのではないかと疑っています(デフォルトで SSL になりますが、Discourse がそれを認識していないと思われます)。そのため、おそらく SSL 接続が確立されていません。

ポート 25 に切り替えると、少なくともエラーは解消されるようですが、まだ送信されたメールは受信できていません…

編集:ポート 25 は正常に機能することを確認しました(ポート 587 も同様のはずですが、残念ながら私の SMTP サーバーは 587 を公開していません)。

以前メールが届かなかったのは、SMTP サーバーによる Discourse サーバー IP アドレスの一時的なブラックリスト登録が原因でした。これは、多くの試行が失敗したためです。

「いいね!」 1

そうだと思います。

そして、あなたが最初ではないことがわかりました… DISCOURSE_SMTP_PORT 465 を検索すると、同様の問題がたくさん見つかりました。

最後のものには、(おそらく?)解決策へのリンクが含まれています。

このパッチにより、DISCOURSE_SMTP_FORCE_TLS=true を設定して、ポート 465 で暗黙的な TLS を使用することが可能になります。
「いいね!」 3

「465問題」に関するトピックもいくつか見かけました。しかし、明白なこと以外でのメールのデバッグは得意ではないため、トラブルシューティングガイドを引用しています。

人々の助けになるように、このガイドに追加できることはありますか?

「いいね!」 2

@schungx さんが DISCOURSE_SMTP_FORCE_TLS=true が実際に解決策であることを確認できれば、それを追加できます。

「いいね!」 5

すぐに試してみます!

編集:@RGJ app.ymlDISCOURSE_SMTP_FORCE_TLS: true が問題を正常に解決することを証明できます! :champagne:

ポート465を使用している場合は、DISCOURSE_SMTP_FORCE_TLS: true を設定してくださいという太字の警告を提案しますが、それともDiscourseはこのことを検出するのに十分賢いべきでしょうか?

「いいね!」 4

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.