SMTPメールは送信されず、接続も失敗しますが、opensslは動作します

こんにちは。この問題にはすでに明確な解決策があるかもしれませんが、お詫び申し上げます。本当に色々調べましたが、私の問題に対する明確な解決策が見つかりませんでした。

そこで、Discordインスタンスをセルフホストし、SMTPの設定をいくつか調整した結果、正しい設定ができました。しかし、新しいユーザーへのメールが送信されません(最初の管理者ユーザーにも送信されません。コンテナ内でrakeコマンドを使用して作成しました)。

当初、DNSの不具合でSMTPに接続できないのではないかと思っていました。./discourse-doctorをいじってコンテナシェルに入ったときに、次のようなメッセージが表示されたからです。

Testing sending to xxxx@gmail.com using smtp-relay.brevo.com:587, username:xxxxxxx@smtp-brevo.com with plain auth.
======================================== ERROR ========================================
Connection to port 587 failed.
====================================== SOLUTION =======================================
The most likely problem is that your server has outgoing SMTP traffic blocked.
If you are using a service like Mailgun or Sendgrid, try using port 2525.
=======================================================================================

しかし、SMTPトラブルシューティングガイドで推奨されているopensslコマンドは、接続できただけでなく、EHLO、AUTH LOGINなどのコマンド(今まで存在を知りませんでした、へへ^^')を使用して、コンテナ内から自分自身にテストメールを送信することができました。したがって、問題はコンテナがSMTPサーバーに接続できないことではないと思います。

明確化のための編集
コンテナ内からこれを行いました。./launcher enter containerコマンドを使用してコンテナにログインしました。そのプロンプトから、上記のようなコマンドを実行しました。

参考までに、私のSMTP設定を以下に示します。ログイン情報は編集してあります。

  DISCOURSE_SMTP_ADDRESS: 'smtp-relay.brevo.com'
  DISCOURSE_SMTP_PORT: 587
  DISCOURSE_SMTP_USER_NAME: 'xxxxxxxx@smtp-brevo.com'
  DISCOURSE_SMTP_PASSWORD: 'xxxxxxxxxxxx'
  #DISCOURSE_SMTP_ENABLE_START_TLS: true           # (optional, default true)
  #DISCOURSE_SMTP_DOMAIN: discourse.example.com    # (required by some providers)
  DISCOURSE_NOTIFICATION_EMAIL: 'noreply@mydomain.xyz'    # (address to send notifications from)
  #DISCOURSE_SMTP_OPENSSL_VERIFY_MODE: none

通知メールは、opensslコマンドでテストしたメールアドレスであり、最後に読んだのは別の投稿で、それを追加しましたが、古い投稿だったのでコメントアウトして試したことはありませんでした。

とにかく、私はここで本当に途方に暮れています。誰かが手を貸してくれることを願っています。もしこれが解決済みの問題で、私が見つけられなかったとしたら、本当に申し訳ありません!

エラーが提案していることを試してみて、偶然うまくいかないか確認してもらえますか?

「いいね!」 2

こんにちは。すでに試しましたが、うまくいきませんでした :frowning:

openssl を使用してテストメールを送信することはできましたが、ポート 587 を使用した場合です。しかし、Discourse インターフェース (GUI のテストメールボタンと rake tests:email[mail] コマンドの両方) では、ポート 287 と 2525 の両方で送信できませんでした。

ちなみに、送信されなかったメールの Sidekiq エラーを見つけました。

Jobs::HandledExceptionWrapper: Wrapped Net::OpenTimeout: execution expired

shared/standalone/log/rails/production.log の関連行が見つかりました。

Started POST "/admin/email/test" for 192.168.0.206 at 2024-10-18 23:49:02 +0000
Processing by Admin::EmailController#test as */*
  Parameters: {"email_address"=>"jggalindez@gmail.com"}
Completed 422 Unprocessable Entity in 5201ms (Views: 0.4ms | ActiveRecord: 0.0ms | Allocations: 12487)

コンテナからポート 587 に接続できますか?

ホストからポート 587 に接続できるようですが、コンテナからはできない可能性があり、それはサーバーのネットワークの問題を意味します。

「いいね!」 2

こんにちは。少し不明瞭だったようですみません。少なくとも私の理解では、以下の手順を実行したため、コンテナ 内から ポート 587 に接続できました。

  • ./launcher enter containername を使用してコンテナにログインしました。
  • コンテナ内から openssl コマンドを実行しました。
  • 疑似 telnet プロンプト(実際には何なのかよくわかりません)から、SMTP サーバーに認証し(ユーザー名とパスワードを base64 に変換する処理をすべて行いました)、電子メールを送信しました。

ただし、サーバー 内から 電子メールを送信しようとはしませんでした。コンテナ内から(私の理解では)送信しただけですが、コンテナ内から送信できるのであれば、サーバー内から送信できるだろうと考えました。

解決しました。DNSの問題だったようです(getentopensslコマンドを使用したときはURLを解決できたため)。SMTPリレーのホストIPを取得するためにgetentを実行し、サーバーアドレスを生のIPに変更してコンテナを実行しました。すると、別のエラーが発生しました。このスレッドにあるエラーです:https://meta.discourse.org/t/email-not-working-ssl-connect-returned-1/229934。そこ で指摘されていた、DISCOURSE_SMTP_OPENSSL_VERIFY_MODE: noneという行をyamlファイルに追加するという解決策で、最終的に動作しました。

DNSの問題が将来問題を引き起こすかどうかはわかりませんが、そうならないことを願っています(笑)。お二人とも、助けてくれてありがとうございました!

「いいね!」 1

コンテナ内でネットワークの問題が発生しているようですが、原因はIP接続ではなくDNSにあります。

コンテナ内からホスト名に openssl s_client で接続できますか?

以下を実行できるはずです。

openssl s_client -connect smtp-relay.brevo.com:587 -starttls smtp

そして、以下のような結果が得られるはずです。

…
Verify return code: 0 (ok)
…

これは、IPアドレスに接続しており、そのIPアドレスは証明書に含まれていないため、予想されることです。

引き起こします。

「いいね!」 1

ええ、そうだろうと思いましたので、設定ファイルに docker_args YAML タグを追加し、DNS サーバーを直接指定しました。

疑問に思っている方のために(docker_args タグがどこにあるのか調べなければなりませんでした)、app.yml ファイルの一部を以下に示します。

*******上記の行は省略*********
## *絶対に*注意して編集してください!
## YAML ファイルは、空白や配置の間違いに非常に非常に敏感です!
## 必要に応じてこのファイルを検証するには、http://www.yamllint.com/ を参照してください

docker_args: "--dns 1.1.1.1 --dns 8.8.4.4 --dns 8.8.8.8"

templates:
  - "templates/postgres.template.yml"
  - "templates/redis.template.yml"
  - "templates/web.template.yml"
  ## IPv6 リスナーを有効にするには、次の行のコメントを解除してください
  #- "templates/web.ipv6.template.yml"
  - "templates/web.ratelimited.template.yml"
*******以下の残りのファイルは省略*********

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