Google G Suite Relay SMTPが機能しない

こんにちは、初めて DigitalOcean の Linux VPS に Discourse をインストールしようとしています。この VPS は Nginx で複数のサイトを運営しており、Discourse を複数のサイトと一緒にインストールする方法についてのチュートリアルに従いました:Run other websites on the same machine as Discourse - #182 by angus

Discourse は正常にインストールされ、動作していました。しかし、管理者アカウントを作成してもメールが届きません。このチュートリアルに従いました:crunchify[dot]com/how-to-setup-email-for-discourse-forum-with-google-apps-smtp-relay-right-way/

私のサーバーは Postfix を使用してメールを Google G Suite に中継しており、WordPress や MyBB では問題なく動作しています。ただし、上記のチュートリアルには Postfix についての言及がなく、直接 Google G Suite に接続していると推測されます。

メールの問題をトラブルシューティングする方法についてのこのガイドに従いました:meta.discourse[dot]org/t/troubleshooting-email-on-a-new-discourse-install/16326

SMTP リレーに telnet 接続は可能です:

$ sudo telnet smtp-relay.gmail.com 587
Trying 2607:f8b0:400d:c04::1c...
Connected to smtp-relay.gmail.com.
Escape character is '^]'.
220 smtp-relay.gmail.com ESMTP n18sm708840ooi.26 - gsmtp

production ログには以下のように表示されます:

Rendering layouts/email_template.html.erb
  Rendered layouts/email_template.html.erb (Duration: 0.1ms | Allocations: 32)
Delivered mail cf23dab4-3e43-421e-8e54-228489c58874@forums.neuronootropic.org (610.1ms)
Job exception: end of file reached

  Rendering layouts/email_template.html.erb
  Rendered layouts/email_template.html.erb (Duration: 0.2ms | Allocations: 32)
Delivered mail a092f703-b590-4792-bd73-d9e4700c3e3c@forums.neuronootropic.org (261.1ms)
Job exception: end of file reached

動作が確認できている noreply@forums.neuronootropic.org を app.yml 設定ファイルのメール設定に指定してみましたが、状況は変わりません。まだ番号付きのメールが送信されています。これは何らかの暗号化ではないかと推測されますが、いずれにせよ受信トレイには届きません。


もう一つの問題は Nginx に関するものです。昨日までは問題なく動作していましたが、今日 app.yml 設定ファイルをいじって URL をサブドメインではなくサブディレクトリに変更しました。

現在のフォーラムである MyBB がサブディレクトリで動作しており、メールに問題がないため、もしかするとサブドメインがメールの動作不良の原因ではないかと確認したかったのです。

この操作により Nginx が壊れたようです。何らかの理由で、Nginx が設定ファイルで指定されていないにもかかわらず、Discourse ディレクトリから SSL 証明書を読み込もうとしています。エラーメッセージは以下の通りです:

$ sudo nginx -t
nginx: [emerg] BIO_new_file("/var/discourse/shared/standalone/ssl/ssl.crt") failed (SSL: error:02001002:system library:fopen:No such file or directory:fopen('/var/discourse/shared/standalone/ssl/ssl.crt','r') error:2006D080:BIO routines:BIO_new_file:no such file)
nginx: configuration file /etc/nginx/nginx.conf test failed

SSL 証明書には Let’s Encrypt を使用しており、通常通り動作しています。Discourse をサブドメインではなくサブディレクトリで実行しようと試みる前の昨日までは、Nginx に問題はありませんでした。

ご助力いただければ幸いです。

私は実際にはメール用の G-Suite リレーを設定していませんが、G-Suite 管理アカウントで forum.neuronootropic.org を送信ドメインとして追加し、検証する必要があるようです。もしそうであれば、Google のドキュメントに基づけば、動作しない理由はありません。

ただし、G-Suite で neuronootr0pic.org が検証済みである場合、メール送信には noreply_forum@neuronootropic.org のようなアドレスを使用することもできます。

ご提案ありがとうございます。

再度メールを確認してみたところ、noreply@forums.neuronootropic.org のアドレスからは受信のみ可能で、送信はできないことがわかりました。G Suite で別ドメインとして設定した際、メインドメインの MX レコードだけで両方対応できると思い込んでいました。

しかし、それは誤りでした。forums.neuronootropic.org 用の MX レコードを追加したところ、送信・受信ともに可能になりました。

ただし、Discourse 側では管理者登録時にアクティベーションメールがまだ送信されていません。

何かご存知のことはありますか?

また、なぜか Nginx が私が指定したこともないのに Discourse ディレクトリから SSL 証明書を読み込もうとしているようですが、この問題へのアプローチ方法について何かご助言はありますか?

編集: 通知メールの設定をサブドメインではなくメインドメインから送信するように変更しました。Discourse を再構築しましたが、まだサブドメインからメールが送信されています。

exec: rails r "SiteSetting.notification_email='noreply@neuronootropic.org'"

$ tail shared/standalone/log/rails/production.log
  Parameters: {"authenticity_token"=>"K6dxoAPvh8PEU6mLHjyFRhY/CcZFFIalhrX08AIh9EgGuOHrJos7i1w0dgdS7okeoSBTrmWJSsc77YpfTnMO4A=="}
  Rendering finish_installation/resend_email.html.erb within layouts/finish_installation
  Rendered finish_installation/resend_email.html.erb within layouts/finish_installation (Duration: 0.4ms | Allocations: 110)
  Rendered layouts/_head.html.erb (Duration: 0.4ms | Allocations: 145)
Completed 200 OK in 19ms (Views: 7.8ms | ActiveRecord: 0.0ms | Allocations: 3036)
  Rendering layouts/email_template.html.erb
  Rendered layouts/email_template.html.erb (Duration: 0.1ms | Allocations: 32)
Delivered mail bce41ef8-2288-42cd-b7ae-e1eb990a4646@forums.neuronootropic.org (705.1ms)
Job exception: end of file reached

nginx の問題は解決しました。sites-enabled ディレクトリに nginx 設定の保存ファイルがあったことが判明しました。sites-available のファイルを sites-enabled にリンクしており、sites-enabled ディレクトリを直接いじることはしていないので、どうしてそこにあったのかはわかりません。

G Suite リレー SMTP の問題は依然として残っています。なぜか理解できません。Discourse の production ログにはエラーの記載がありません。

Discourse doctor:

==================== MAIL TEST ====================
信頼性の高いテストを行うには、http://www.mail-tester.com/ からメールアドレスを取得してください。
または、単に自分自身にテストメッセージを送信してください。
メールテストのメールアドレス?(スキップするには 'n')[forums@neuronootropic.org]: forums@neuronootropic.org
forums@neuronootropic.org へメールを送信中...
smtp-relay.gmail.com:587 を使用して forums@neuronootropic.org への送信をテスト中。
======================================== ERROR ========================================
                                    予期せぬエラー

ファイルの末尾に到達しました

====================================== SOLUTION =======================================
これは一般的なエラーではありません。推奨される解決策は存在しません!

上記の正確なエラーメッセージを https://meta.discourse.org/ まで報告してください。
(もし解決策が見つかったら、それも合わせて!)
=======================================================================================

これは何を意味するのでしょうか?

えっと…G Suite でリレーを設定する際に保存ボタンをクリックし忘れていました、笑

今はメールが機能しています。:slight_smile: