discourse-doctor のメールテスト失敗

./discourse-doctor を使用して SMTP の問題をトラブルシューティングしようとしています。

見つかった最も関連性の高い問題は、Yet other SMTP 587 port email various errors です。
提案を実装する前に、一貫してタイムアウトが発生していました。

以下のように設定した後:

DISCOURSE_SMTP_FORCE_TLS: true
DISCOURSE_SMTP_ENABLE_START_TLS: false

discourse-doctor から次の結果が得られます。

==================== MAIL TEST ====================
堅牢なテストを行うには、http://www.mail-tester.com/ からアドレスを取得してください。
または、単に自分宛にテストメッセージを送信してください。
メールテスト用メールアドレス? ('n' でスキップ) [admin@burlyqna.org]:
admin@burlyqna.org にメールを送信中。 . .
smtp.mailfence.com:465、ユーザー名:philion@mailfence.com、プレーン認証を使用して admin@burlyqna.org への送信をテスト中。
SMTP サーバーへの接続に成功しました。
admin@burlyqna.org に送信中。 . .
メールの送信に失敗しました。
end of file reached

参照: http://talk.burlyqna.org/NjdhMDAwYTk4NmM3MmM1.txt

SMTP サーバーの設定は、以下を使用して外部で検証できます。

swaks --to philion@gmail.com --from admin@burlyqna.org --server smtp.mailfence.com:465 --auth LOGIN --tlsc --auth-user philion@mailfence.com

SMTP サーバーへの接続に成功しました。 と表示されるのに メールの送信に失敗しました。 となる原因について、何か手がかりはありますか?

よろしくお願いします。
Paul

「いいね!」 1

TLSにはポート587を使用すべきですか?

puts error.backtrace(またはそれに類するもの)を次に追加してから再実行してみてください。

discourse-doctor を再実行してください。

「いいね!」 1

これが自動応答からの回答ですが、smtp ドメインを試すのは試す価値があると思います。

「いいね!」 1

トーマス様

サポートフォーラムで465に関する多くの議論があります。私の読んだところによると、DiscourseはSSLとTLSをSMTP経由で利用する際に多くの仮定をしており、詳細な動作を制御する環境変数がいくつかあるようです。

しかしながら、これらのフォーラムで報告されているエラーや関連する質問の数から、これらの設定は文書化が悪く、使用が困難であるという強い印象を受けています。そして、2017年から同様の問題が見られることから、これは長年問題となっています。

「ポート465」または「Net::ReadTimeout smtp」で検索すると、同様の問題の長いリストが表示されます。

これを試してみます。ありがとう!

トーマス、

Dockerビルドでこのファイルを見つけようとしていますが、見つかりません。コンテナにラップされていることはわかっていますが、discourse/discourseではなくdiscourse/discourse_dockerをクローンしました。

launcher enter appでアプリに入ろうとしても、そのファイルを編集する方法もviをインストールする方法もありません。

デバッグログをオンにして./discourse-doctorを実行するためのドキュメントやフラグが見つかりません。

同じように失敗します。メールを送信できません。./discourse-doctorは同じエラーを報告します。

app.yml を提案通り更新し、アプリを再構築しました(メールなし)。./discourse-doctor を実行しましたが、同じエラーメッセージが表示されました。

./launcher enter  app
sudo apt update && sudo apt install neovim -y

で解決するはずです。

ありがとうございます!「sudo apt install vi」ができないと、かなり時代遅れになってしまいます。今は neovim と呼ばれることを覚えておく必要があります。

スタックトレースのダンプという提案を受けて、以下を提示します。
http://talk.burlyqna.org/ODgyZjg5Y2QyMTU1ZmEx.txt

関連するスニペット:

/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/net-protocol-0.2.2/lib/net/protocol.rb:237:in `rbuf_fill'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/net-protocol-0.2.2/lib/net/protocol.rb:199:in `readuntil'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/net-protocol-0.2.2/lib/net/protocol.rb:209:in `readline'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/net-smtp-0.5.1/lib/net/smtp.rb:1017:in `recv_response'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/net-smtp-0.5.1/lib/net/smtp.rb:1008:in `block in getok'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/net-smtp-0.5.1/lib/net/smtp.rb:1027:in `critical'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/net-smtp-0.5.1/lib/net/smtp.rb:1006:in `getok'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/net-smtp-0.5.1/lib/net/smtp.rb:986:in `quit'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/net-smtp-0.5.1/lib/net/smtp.rb:732:in `do_finish'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/net-smtp-0.5.1/lib/net/smtp.rb:645:in `ensure in start'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/net-smtp-0.5.1/lib/net/smtp.rb:645:in `start'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/mail-2.8.1/lib/mail/network/delivery_methods/smtp.rb:109:in `start_smtp_session'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/mail-2.8.1/lib/mail/network/delivery_methods/smtp.rb:100:in `deliver!'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/mail-2.8.1/lib/mail/message.rb:269:in `deliver!'
/usr/local/lib/ruby/3.3.0/delegate.rb:87:in `method_missing'
/var/www/discourse/lib/email/sender.rb:296:in `send'

接続が相手側によって切断されたようです。

ところで、http://talk.burlyqna.org/NjdhMDAwYTk4NmM3MmM1.txt はもう利用できません。

「いいね!」 1

ログファイルは再構築時に保持されますか?

パスワードを記号なしで更新し、SMTP認証の伝播遅延(昼食をとるのに十分な時間)を待ってから、swaksでメールを正しく送信するために適切な認証情報を確認しましたが…

同じエラーが発生しました。

再構築するとスタックトレースのダンプが削除されることに気づいたので、それを元に戻して ./launcher destroy app && ./launcher start app を試してみます。

「いいね!」 1

デバッグトレースをインストールし、ドクターを実行しました。
http://talk.burlyqna.org/NWQ5MjBlMTIwN2JiNGNl.txt

==================== MAIL TEST ====================
堅牢なテストを行うには、http://www.mail-tester.com/ からアドレスを取得してください。
または、自分自身にテストメッセージを送信してください。
メールテストのメールアドレスは?(スキップするには「n」)[admin@burlyqna.org]:
admin@burlyqna.org にメールを送信中 . . .
smtp.mailfence.com:465、ユーザー名:philion、プレーン認証を使用して admin@burlyqna.org への送信をテストしています。
SMTPサーバーへの接続に成功しました。
admin@burlyqna.org に送信中 . . .
メールの送信に失敗しました。
end of file reached
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/net-protocol-0.2.2/lib/net/protocol.rb:237:in `rbuf_fill'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/net-protocol-0.2.2/lib/net/protocol.rb:199:in `readuntil'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/net-protocol-0.2.2/lib/net/protocol.rb:209:in `readline'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/net-smtp-0.5.1/lib/net/smtp.rb:1017:in `recv_response'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/net-smtp-0.5.1/lib/net/smtp.rb:1008:in `block in getok'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/net-smtp-0.5.1/lib/net/smtp.rb:1027:in `critical'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/net-smtp-0.5.1/lib/net/smtp.rb:1006:in `getok'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/net-smtp-0.5.1/lib/net/smtp.rb:986:in `quit'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/net-smtp-0.5.1/lib/net/smtp.rb:732:in `do_finish'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/net-smtp-0.5.1/lib/net/smtp.rb:645:in `ensure in start'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/net-smtp-0.5.1/lib/net/smtp.rb:645:in `start'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/mail-2.8.1/lib/mail/network/delivery_methods/smtp.rb:109:in `start_smtp_session'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/mail-2.8.1/lib/mail/network/delivery_methods/smtp.rb:100:in `deliver!'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/mail-2.8.1/lib/mail/message.rb:269:in `deliver!'

ログイン名として完全なメールアドレスを使用してみましたか?

app.yml を更新して、ユーザーとしてフルメールを使用するようにし、./launcher destroy app && ./launcher start app で再デプロイしました。

同じエラーが発生しています: http://talk.burlyqna.org/ZDg1YWE1YTA2YWU1Zjhj.txt

destroystart でデバッグ情報も消去されましたが、同じ問題だと仮定します。

case rv = @io.read_nonblock(BUFSIZE, tmp, exception: false)

が nil を返し、それが EOF および非/エラー応答につながります。

多くのテストと @thoka の多大な助けを経て、以下の要約を提供します。

container/app.yml に提供したのと同じ認証情報を使用して SMTP テストを実行でき、これは swaks (Swaks - Swiss Army Knife for SMTP) と @thoka が提供したサンプル Ruby コード(下記参照)の両方で機能します。

これらは一貫して機能します。しかし、Discourse サーバーを起動しようとすると(管理者ユーザーに最初のメールを送信できない)、または discourse-doctor ボットを使用すると、メール送信に失敗します。

==================== MAIL TEST ====================
堅牢なテストを行うには、http://www.mail-tester.com/ からアドレスを取得してください。
または、単に自分宛にテストメッセージを送信してください。
メールテスト用メールアドレス? ('n' でスキップ) [admin@burlyqna.org]:
admin@burlyqna.org にメールを送信中。 . .
smtp.mailfence.com:465、ユーザー名:xxx@mailfence.com、プレーン認証を使用して admin@burlyqna.org へのテスト送信をテスト中。
SMTP サーバー接続成功。
admin@burlyqna.org に送信中。 . .
メール送信失敗。
end of file reached

標準的な Ruby ツールを使用してテストメールを送信できるため、これはプロトコル設定の失敗のようです。

require 'mail'

SMTP_SERVER = 'smtp.mailfence.com'
SMTP_PORT = 465
USERNAME = 'xyz'
PASSWORD = '...'

FROM = 'admin@burlyqna.org'
TO = 'testing@gmail.com'
SUBJECT = 'Test from Ruby'

BODY = "Hello,\n\nThis is a test email sent from Ruby over a SSL-secured connection.\n\nBest regards!"

Mail.defaults do
  delivery_method :smtp, {
    address: SMTP_SERVER,
    port: SMTP_PORT,
    user_name: USERNAME,
    password: PASSWORD,
    domain: "burlyqna.org",
    enable_starttls_auto: :false,
    authentication: :plain,
    ssl: true,
  }
end

begin
  puts 'Sending email...'
  puts "SMTP_SERVER: #{SMTP_SERVER}"
  puts "SMTP_PORT: #{SMTP_PORT}"
  puts "USERNAME: #{USERNAME}"
  puts "PASSWORD: #{PASSWORD}"
  puts "FROM: #{FROM}"
  puts "TO: #{TO}"

  mail = Mail.new do
    to TO
    from FROM
    subject SUBJECT
    body BODY
  end

  mail.deliver!
end

私の app.yml の現在の SMTP 設定は次のとおりです。

DISCOURSE_SMTP_ADDRESS: smtp.mailfence.com
DISCOURSE_SMTP_PORT: 465
DISCOURSE_SMTP_USER_NAME: xxx@mailfence.com
DISCOURSE_SMTP_PASSWORD: '...'
DISCOURSE_SMTP_FORCE_TLS: true                   # https://meta.discourse.org/t/cannot-send-email-problem-with-port-465/246004/8
DISCOURSE_SMTP_ENABLE_START_TLS: false           # (optional, default true)
DISCOURSE_SMTP_DOMAIN: burlyqna.org              # (required by some providers)
DISCOURSE_NOTIFICATION_EMAIL: noreply@talk.burlyqna.org
「いいね!」 1

最終確認:メールが動作しました!

途中で発生した問題:

  • DISCOURSE_SMTP_PASSWORD に記号が含まれていましたが、引用符で囲まれていませんでした
  • DISCOURSE_SMTP_FORCE_TLS: SSL を有効にするために true に設定
  • DISCOURSE_SMTP_ENABLE_START_TLS: TLS ハンドシェイクを停止するために false に設定
  • DISCOURSE_NOTIFICATION_EMAIL が存在しないメールアドレスに設定されていました
DISCOURSE_SMTP_ADDRESS: smtp.mailfence.com
DISCOURSE_SMTP_PORT: 465
DISCOURSE_SMTP_USER_NAME: example@mailfence.com
DISCOURSE_SMTP_PASSWORD: 'passwd'
DISCOURSE_SMTP_FORCE_TLS: true                  
DISCOURSE_SMTP_ENABLE_START_TLS: false
DISCOURSE_NOTIFICATION_EMAIL: admin@example.org
「いいね!」 1

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.