こんにちは。ここ数日、Discourse フォーラムのセットアップに苦労しており、その原因はすべてメール設定にあります。メール登録をスキップすることでフォーラム自体は立ち上げることができましたが、ユーザーが登録できるようにするにはメール機能を正常に動作させる必要があります。同じ結果が何度も出ており、多くの異なる方法を試しましたが、どれも効果はありませんでした。毎回、以下の2つのいずれかの現象が発生します:
テストメールのエラーで「hostname . . . does not match the server certificate」と表示される
テストメールのエラーで「502」と表示され、Sidekiq 側では Jobs::HandledExceptionWrapper: Wrapped Net::ReadTimeout: Net::ReadTimeout with #<TCPSocket:(closed)> というエラーが発生する
では、それぞれがいつ現れるかというと、1 はすべてのシナリオで発生します。一方、2 はポート465を使用した際に発生しました。「テストメールを送信」に少し時間がかかった後、このエラーが表示されました。先ほどSSLを無効にしたため、ポート587は使用可能になりましたが、エラー1や2の代わりに「Sending test Email」の状態のまま停止してしまいます。
現時点で何をすべきか分からず、数日間この問題に直面していますが、まだ解決策は見つかっていません。何かご助力いただければ大変助かります。お時間とご協力をありがとうございます。
更新: curl --ssl-reqd コマンドを使用して、ポート465、587、25、2525をテストしました。結果は以下の通りです:
25: 動作せず(Curl エラー35、バージョンが正しくない)
465: 意図通り動作し、メール応答も高速
587: 動作せず(Curl エラー35、バージョンが正しくない)
2525: エラーは発生しなかったが、メールが送信されず(送信時間が計上され続け、メールが送信されないまま停止しない)
参考になれば幸いです。現在の設定(502エラー発生時)は以下の通りです:
DISCOURSE_SMTP_ADDRESS: CENSORED
DISCOURSE_SMTP_PORT: 465
DISCOURSE_SMTP_USER_NAME: CENSORED
DISCOURSE_SMTP_PASSWORD: CENSORED
# DISCOURSE_SMTP_ENABLE_START_TLS: true # (optional, default true)
テンプレート:
templates:
- "templates/postgres.template.yml"
- "templates/redis.template.yml"
- "templates/web.template.yml"
- "templates/web.ratelimited.template.yml"
## Lets Encrypt (https) を追加したい場合は、以下の2行のコメントを外してください
- "templates/web.ssl.template.yml"
- "templates/web.letsencrypt.ssl.template.yml"
ポート公開設定:
expose:
- "80:80" # http
- "443:443" # https
以下はメール情報を含む画像です:
Stephen
(Stephen)
2020 年 9 月 23 日午後 6:37
2
推奨されているメールプロバイダのいずれかを使用していますか?
Discourse サーバーはどこにインストールされていますか?
そうは思いません。メールは VoltHosting から提供されているものです。それが参考になれば幸いです。
また、Discourse サーバーは var/discourse 下にインストールされていますが、正常に動作しています(メールをスキップして作成した管理者アカウントでウェブサイトに入り、閲覧することができます)。メールのテストも、この方法で行っています(「Email > Settings」と「Email > Preview Summary」でテストメールを送信しようとしたところ、これらのエラーが発生しました)。それでも、お手伝いいただきありがとうございます。
Stephen
(Stephen)
2020 年 9 月 23 日午後 6:49
4
推奨されているプロバイダーのいずれかを使用してみてください。これにより、問題が Discourse のインストールにあるのか、通信しようとしているメールサーバーにあるのかを迅速に特定できます。
推奨プロバイダーのリストが存在する理由は、それらが Discourse と互換性があることが検証されているからです。SMTP は通常でも手間がかかることが多く、推奨される設定を使用していない場合は、それによって生じる追加の技術的負担をあなたが引き受けるものと一般的に想定されます。
返信ありがとうございます。推奨されているプロバイダーのいずれかを利用するのは難しいと考えております。プランを作成した方が同社で複数のメールアカウントをお持ちのため、VPS 自体のコストに追加で費用がかかってしまうからです。現時点ではその対応は難しいと思われます。メールサービスを毎回フォーラムを再構築することなく、より効率的にテストできる別の方法はありませんでしょうか?ご協力ありがとうございます。
Stephen
(Stephen)
2020 年 9 月 23 日午後 6:55
6
メール設定を変更するために再ビルドする必要はありません。以下のコマンドを実行してください:
./launcher destroy app
./launcher start app
メール設定を編集した後、新しい設定が自動的に読み込まれます。これはすべての環境変数にも当てはまります。
サーバー証明書がホスト名と一致しない場合は、Discourse の問題ではなく、VoltHosting が対応すべき問題です。VoltHosting のメールシステムに関するサポートについては、同社に相談することをお勧めします。有効な代替ホスト名を使用できる場合もあります。
いずれにせよ、上記のページで提供されている無料トライアルのいずれかを使用して、Discourse 自体がメールを正しく処理していることを確認することをお勧めします。Discourse 自体が正常に機能していることが確認できたら、いつでも VoltHosting の SMTP に戻すことができます。
念のため確認ですが、インスタンスは このガイド に従ってインストールされましたか?
ありがとうございます。将来的にはその方法を使いますが、現時点では解決策を探しています。参考になればと思い、Sidekiqのエラーのスクリーンショットを添付します:
もちろん無料トライアルを利用することもできますが、それはあくまで無料トライアルであり、いくつかの制限があります。はい、Discourseフォーラムのインストールについては公式ガイドに従いました。フォーラムは正常に稼働していますが、メールだけが機能していません。お手伝いいただきありがとうございます。
Stephen
(Stephen)
2020 年 9 月 23 日午後 7:04
8
現時点での選択肢は、推奨プロバイダーを使用してテストするか、VoltHosting に連絡することです。エラーは、SMTP サーバーから提示された証明書が接続に使用されたホスト名に対して無効であることを示しています。
推奨サービスのいずれかでテストしてこれを証明しない限り、この問題は Discourse のインストールとはほとんど 関係がないでしょう。
pfaffman
(Jay Pfaffman)
2020 年 9 月 23 日午後 7:20
9
そのタイムアウトエラーは、メールサーバーに接続できないことを示しています。Digital Ocean がアクセスをブロックしているか、別の要因が原因です。
以下のコマンドで接続を試すことができます。
telnet server.hostname server-port
メールサーバーのセットアップや管理を行っている担当者への相談が必要です。
返信ありがとうございます。今すぐコマンドを実行しました。結果は以下の通りです:
AUTH LOGIN が許可されるべきかどうかはわかりません。もし許可されるべきなら、それが問題の原因だと思われますが、合っていますか?お手伝いいただきありがとうございます。
pfaffman
(Jay Pfaffman)
2020 年 9 月 23 日午後 8:44
11
ふむ、サーバーレベルではなかったようですね。次の推測としては、Dockerのネットワーク関連の問題かもしれません。ただし、別の要因の可能性もあります。
ご返信ありがとうございます。可能であれば、この件についてさらに調査するにはどうすればよいでしょうか?それをテストして出力を確認するための Docker コマンドはありますか、それとも他に方法がありますか?どこかでテストして問題の出力を確認する方法はありますか?もしそれが不可能であれば、それも理解できます。お手伝いいただき、ありがとうございます。
更新: curl --ssl-reqd コマンドを使用して、ポート 465、587、25、2525 をテストしました。結果は以下の通りです:
25: 動作しませんでした(Curl エラー 35、バージョン番号が誤っています)
465: 意図した通りに動作し、メールの応答も高速でした
587: 動作しませんでした(Curl エラー 35、バージョン番号が誤っています)
2525: エラーは発生しませんでしたが、メールが送信されませんでした(送信に時間がかかり、メールが送信されないまま時間が経過し続けました)
参考までに、現在の設定(502 エラーが発生している状態)は以下の通りです:
DISCOURSE_SMTP_ADDRESS: CENSORED
DISCOURSE_SMTP_PORT: 465
DISCOURSE_SMTP_USER_NAME: CENSORED
DISCOURSE_SMTP_PASSWORD: CENSORED
# DISCOURSE_SMTP_ENABLE_START_TLS: true # (オプション、デフォルトは true)
テンプレート:
templates:
- "templates/postgres.template.yml"
- "templates/redis.template.yml"
- "templates/web.template.yml"
- "templates/web.ratelimited.template.yml"
## Lets Encrypt(https)を追加したい場合は、以下の 2 行のコメントを外してください
- "templates/web.ssl.template.yml"
- "templates/web.letsencrypt.ssl.template.yml"
そして、公開設定:
expose:
- "80:80" # http
- "443:443" # https
以下はメール情報を含む画像です:
原因が Discourse が SSL/TLS で接続していないことによるものなのか、それとも他の要因によるものなのかは不明です。この情報が役立ち、問題解決に貢献することを願っています。
IAmGav
(Gavin Perch)
2020 年 9 月 24 日午後 2:29
14
これを追加して、動作するか確認してください。
DISCOURSE_SMTP_ENABLE_START_TLS: False
返信ありがとうございます。残念ながら動作しませんでした。引き続き同じ502エラーが発生しています。
役立つかわかりませんが、VPS から curl --ssl-reqd コマンドを実行して、メールの送信に成功しました(これはこちらの 返信で触れました)。それだけでなく、./launcher enter app でアプリ内に入り、同じコマンドを実行したところ、先ほどのテストと同じ結果(465 は動作、25 と 587 は動作せず、2525 はタイムアウトエラー)が得られました。しかし、フォーラム上で(テストメールを使用して)実行すると、依然として 502 エラーが発生します。この追加情報が役立つことを願っています。ご支援ありがとうございます。