DiscourseのSMTPがドメインの代わりに「EHLO localhost」を送信し、Google smtp-relayが機能しなくなります

@iwaffles -

このスレッドおよび関連する他のスレッドに記載されている解決手順を試しましたか?

app.yml に以下の行を追加してください。

DISCOURSE_SMTP_DOMAIN: [your server's fqdn]

その後、/var/discourse 内で ./launcher rebuild app を実行してください。

discourse-doctor が引き続き失敗を報告する可能性はありますが、管理コンソール内からのテストメールは機能し、通常のメールフローが再開されるはずです。

それでも動作しない場合は、ご報告ください。まだ見つかっていない別の要因がある可能性があります。

「いいね!」 3

再構築を試しましたが、問題なく動作しました!

おっしゃる通り、discourse-doctor はまだ私の方で失敗しています。

おそらく、変更が反映されなかったのは、再構築ではなく Discourse の再起動を行っていたためだと思われます。@Syonyk さん、ありがとうございます!

「いいね!」 2

localhost が常に誤りであることは明らかですが、ほとんどの SMTP サーバーはその値を無視するため、これまで問題となっていませんでした。

https://github.com/discourse/discourse 内で smtp_domain が登場する 3 か所は、すべて 2〜7 年以上前のものです。何かの理由で、あるライブラリが localhost を送信し始めたのでしょうか?

@Falco 氏の懸念にもかかわらず、最も良い解決策は、どこかでこれを修正することだと思います。

もし、RFC に反しているにもかかわらず localhost を送信し続けるという合意が得られたとしても、上記のように rake タスクを修正する必要があります。ちなみに、そのコードを書いたのは私です :man_shrugging: しかし、待ってください。action_mailer.smtp_settings['domain'] は空になり得ることが分かりました。つまり、現時点では以下のように修正すべきでしょう。

    Net::SMTP.start(smtp[:address], smtp[:port], 'localhost', smtp[:user_name], smtp[:password], smtp[:authentication])

     Net::SMTP.start(smtp[:address], smtp[:port], smtp[:domain] || 'localhost', smtp[:user_name], smtp[:password], smtp[:authentication])

とします。もし domain が存在すればそれを使用し、discourse_smtp_host が定義されていない場合は、現在の(おそらく誤った)localhost を使用するという挙動を維持します。

これを discourse-setup に追加するのはためらわれます。現状ではほぼすべてのユーザーで機能しており、さらに混乱を招くような質問を一つ増やすことになるからです(そして、今まさに notification_email に関する質問を追加しようとしています。不注意であれば、数十年前に私が覚えている Linux カーネルのセットアップのような状況になりかねません)。

もしかすると、localhost がここから来ているのでしょうか?

「いいね!」 2

この問題にフラグが立てられたので確認しましたが、修正は機能しています。通常は低負荷のインスタンスも Sidekiq で急増し、どうやらダイジェストジョブが何度も再試行されたことが原因のようです。

エラーメッセージが DoS 拒否時に Google が表示するものと一致していたため、Google が利用制限を新設したのかと思いました。

「いいね!」 2

ご報告ありがとうございます!Discourse のセットアップに修正を追加する予定です。

「いいね!」 2

これは現在以下の通りです:

  • 全サンプルファイルの環境設定例として追加されました

  • Discourse の新規インストール設定時に尋ねられるようになりました

  • discourse doctor および rake タスクで修正されました

皆様、ありがとうございます :tada:

「いいね!」 5