SMTPタイムアウトの延長

Discourse がメール送信の確認応答を SMTP サーバーから受け取るのを待つタイムアウト間隔を延長する方法はありますか?または、この確認応答を不要するように Discourse を設定する方法はありますか?

現在、Discourse インスタンスで重複メールが生成される問題が発生しています。Discourse はメール送信時に Net::Timeout エラーを受け取っています。私の E メールプロバイダーは実際にメールを配信していますが、Discourse はそれを認識せず、メールを再送信し続けます。これは無限に繰り返されます。

最近、SMTP タイムアウトのカスタマイズを追加しましたが、それは実際の SMTP 接続に関するものです。

お困りのことは、接続が確立された後で、送信トランザクションのタイムアウトに関する問題のようですね。

「いいね!」 2

はい、私の知る限りではそうです。接続は確立され、メールメッセージは送信されますが、その後にNet::Timeoutエラーが報告されます。

discourse_doctorスクリプトを使用すると、トランザクションが成功したときに返されるメッセージIDと、失敗したときにNet::Timeoutエラーが表示されます。

この問題は、Discourse 2.9.0.beta5にアップデートした後に発生しました。Discourseはこのアップデートでこのエラーに対する許容度が低下したと推測されます。

メールや net/smtp の Ruby gem に関連する変更は見つかりませんでした。SMTP サーバーに問題があるのではないでしょうか?別のサーバーに移行することは可能ですか?

「いいね!」 1

ご確認ありがとうございます。私も、問題の原因は電子メールプロバイダーにあると考えています。電子メール送信後の応答が遅すぎるのです。問題は負荷に関連しているとしか考えられません。なぜなら、問題が発生しない日もあるからです。

電子メールプロバイダーを変更することは、いくつかの理由から大きな課題です。Discourseがこの問題を回避するように設定する方法を見つけることが、最も魅力的な解決策です。

新しいメールプロバイダーへの移行がこの問題の唯一の解決策のように思えますが、そのためにはドメイン全体のメールプロバイダーを再構成する必要があり、それは避けたい作業です。

Discourse の送信メール処理コードに変更を加えて、過去に行っていたようにメール送信の失敗を無視させることはできますか?Rails 開発者ではないので、どこから始めればよいかわかりません。将来の Discourse のアップデートを受け取る機能を壊したくありません。

上記の発言の根拠は何ですか?ドメイン/サブドメインごとに実際にメールを受信できるインフラは1セットしかないですが、複数のサービスがその代理でメールをリレーできます。

あるいは、インスタンス専用の新しいサブドメインを起動することもできます。これは、設定のために再構築さえ必要としません。

以前、設定を誤ってしまい、解決できなかったため、何も変更することにためらっていました。Discourseのメールは会社のドメインから送信されることを希望していましたが、それはもう機能しないため、提案された通り、送信メール用のサブドメインを再度使用してみます。

RackSpace Cloud を使用してメールサブドメインを作成し、Mac の Apple Mail および curl からメールを送信できることを確認しました。サーバーから curl を使用してメールを送信できることも確認しました。しかし、discourse-doctor から次のエラーが発生しています。

Testing sending to support@latenightsw.com using secure.emailsrvr.com:465, username:username with plain auth.
======================================== ERROR ========================================
                                    UNEXPECTED ERROR

Net::ReadTimeout

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

正確なエラーメッセージを https://meta.discourse.org/ に報告してください。
(解決策が見つかった場合は、それも!)

app.yml ファイルには次の設定が含まれています。

  DISCOURSE_SMTP_ADDRESS: secure.emailsrvr.com         # (必須)
  DISCOURSE_SMTP_PORT: 465                             # (任意)
  DISCOURSE_SMTP_USER_NAME: username      # (任意)
  DISCOURSE_SMTP_PASSWORD: password               # (任意, WARNING パスワードの '#' 文字は問題を引き起こす可能性があります!)

  #DISCOURSE_SMTP_ENABLE_START_TLS: true           # (任意, デフォルトは true)

これは、こちら で文書化されている設定と一致します。

DISCOURSE_SMTP_ENABLE_START_TLS を false に設定してみました。Net::ReadTimeout エラーに関する他の投稿では、この設定を試すことが示唆されていますが、違いはありませんでした。

  DISCOURSE_SMTP_AUTHENTICATION: "login"
  DISCOURSE_SMTP_OPENSSL_VERIFY_MODE: none

この障害をどのように診断できますか?

@Falco Discourse の設定をこのように変更するにはどうすればよいですか? app.yml ファイルに追加できる設定のドキュメントが見つかりません。