ローカルSMTPサーバーを使用してメールを送信できません

SMTP サーバーを Telnet でテストしました。
Telnet は SMTP サーバーに接続できました。
Telnet を使用して SMTP サーバーへの認証ができました。
Telnet を使用して SMTP サーバーからメールの送信に成功しました。Telnet で使用した値は、/var/discourse/containers/app.yaml ファイルに記載されている値と完全に一致しています。

Discourse doctor は、Discourse が SMTP サーバーに正常に接続したと報告しています。
Discourse doctor は、Discourse がテストメールの送信に失敗したと報告しています。

したがって、Discourse にはメール送信を妨げるバグが存在します。

Discourse のバグというよりは、あなたのセットアップに何らかの問題があるのではないかと思います。:wink:

「いいね!」 2

もしかして、DigitalOcean などで smtp-relay.gmail.com をお使いではありませんか?最近、それが動作しなくなったようですが、まだ理由がはっきりしていません。

いいえ。SMTP サーバーはすでに説明した通り正常に動作しており、Discourse も正しくインストールされ、管理者登録メールの送信を促す画面を適切に表示しています。しかし、そのメールが送信されません。

Discourse Docker コンテナと同じマシン上に配置されたローカル SMTP サーバーを使用しています。

/var/discourse/shared/standalone/log/rails/production.log にエラーが見つかりました:

Rendering layouts/email_template.html.erb
  Rendered layouts/email_template.html.erb (Duration: 0.1ms | Allocations: 32)
Delivered mail f915c15e-9c4d-4d4e-9527-81bc4984540c@forum.domain.com (63.7ms)
Job exception: hostname "mail.forum.domain.com" does not match the server certificate

このエラーの意味は何でしょうか?

「いいね!」 3

上記のエラーメッセージは、サーバーの SSL 証明書について言及しているようです。

サーバー上の SSL 証明書は正しく、適切なホスト名が設定されています。

これは Discourse のバグのようですが、Discourse がサーバーの SSL 証明書を正しく検出できないようです。

これは Discourse のバグというよりは、ホストの DNS リゾルバ設定または SSL 証明書に問題があるように思われます。

telnet は SSL を使用しないため、それが動作した理由だと思われます。Linux 環境では、OpenSSL を使用して接続をテストし、証明書を検査することで、さらに詳しい確認ができるかもしれません。

参考になる情報がこちらにあります: https://docs.pingidentity.com/bundle/solution-guides/page/iqs1569423823079.html

サイトの https はアドレスバーに緑色の鍵が表示されているため正常に動作しています。サイトの SSL 証明書に問題はありません。問題があるのは、Discourse が SSL 証明書を検出する方法です。

そのエラーはサイト証明書に関するものではなく、SMTP サービスの証明書に関するものです。

「いいね!」 2

SMTP サービスの証明書は、ウェブサイトの SSL 証明書ではなく、サーバーの SSL 証明書です。サーバーの SSL 証明書は正しく、正常に動作しています。

Discourse コンテナと同じマシン上でローカル SMTP サーバーを設定する際、Discourse は app.yml 内の SMTP 設定の正確な値を明確に指定していません。その結果、多くの混乱とエラーが発生しています。

app.yml の設定において、DISCOURSE_SMTP_ADDRESS が何を指すのかは Discourse によって明確に説明されていません。

実際には、それは subdomain.domain.com であり、mail.subdomain.domain.com ではありません。

正しい値:
DISCOURSE_SMTP_ADDRESS: forum.domain.com
DISCOURSE_SMTP_PORT: 587
DISCOURSE_SMTP_USER_NAME: postmaster@forum.domain.com
DISCOURSE_SMTP_PASSWORD: "password"
DISCOURSE_SMTP_ENABLE_START_TLS: true           # (オプション、デフォルトは true)

また、初期登録メールの送信に失敗した後に表示されるエラーメッセージにおいて、「サーバー証明書」が何を指すのかも Discourse は明確に説明していません。エラーメッセージは以下の場所に記録されます:
/discourse/shared/standalone/log/rails/production.log
“Job exception: hostname "mail.forum.domain.com" does not match the server certificate”

しかし実際には、「サーバー証明書」とは単にサーバーの SSL 証明書のことです。
さらに、エラーメッセージでは Discourse が誤って「hostname」と記載していますが、実際には DISCOURSE_SMTP_ADDRESS を指しています。

Discourse の曖昧さにより、多くの苦労を強いられました。

解決策は、サーバーの SSL 証明書を正しい SSL 証明書に設定することでした。

この問題を Discourse フォーラムに投稿した際、多くの誤解を招く不透明な回答が寄せられました。

Discourse はこれらの問題を修正すべきです。

「いいね!」 2

Discourse Doctor は、メールが送信されたと報告しています。

admin@email.com へメールを送信中...
forum.domain.com:587 を使用して admin@email.com への送信をテスト中。
SMTP サーバーへの接続に成功しました。
admin@email.com へ送信中...
SMTP サーバーがメールを受け付けました。

しかし、受信トレイや迷惑メールフォルダにメールが届いていません。

この問題をどのように解決すればよいでしょうか?

ローカルのSMTPサーバーのログを確認してください。Discourseが正しくSMTPサーバーに配信した場合は、それ以降はDiscourseの管轄外となります。

Exim4 のログにエラーメッセージが表示されています。これは何を意味しますか?

2021-01-21 00:39:39 H=(localhost.localdomain) [172.17.0.2] X=TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256 CV=no F=<noreply@forum.domain.com> A=dovecot_plain:postmaster@forum.domain.com rejected RCPT <admin@email.com>: Sender verify failed

送信者の検証に失敗しました。