philion
(Paul Philion)
2025 年 3 月 9 日午前 5:32
1
./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
thoka
(Thomas Kalka)
2025 年 3 月 9 日午前 6:42
3
TLSにはポート587を使用すべきですか?
puts error.backtrace(またはそれに類するもの)を次に追加してから再実行してみてください。
discourse-doctor を再実行してください。
「いいね!」 1
sam
(Sam Saffron)
2025 年 3 月 9 日午前 9:19
4
Support Helper Bot:
提案された回答:
discourse-doctor テストのエラーメッセージ \"SMTPサーバーへの接続は成功しましたが、メールの送信に失敗しました。ファイルの終端に達しました\" は、Discourse 環境がメール送信中に SMTP サーバーとどのようにやり取りするかに問題があることを示している可能性が高いです。
まず、app.yml で SMTP 設定を確認してください。
DISCOURSE_SMTP_ADDRESS: smtp.mailfence.com
DISCOURSE_SMTP_PORT: 465
DISCOURSE_SMTP_USER_NAME: philion@mailfence.com
DISCOURSE_SMTP_PASSWORD: [あなたのパスワード]
DISCOURSE_SMTP_FORCE_TLS: true
DISCOURSE_SMTP_ENABLE_START_TLS: false
DISCOURSE_SMTP_DOMAIN: [あなたのドメイン] # ドメインと一致していることを確認してください!
この場合、`DISCOURSE_SMTP_DOMAIN` 設定を追加することが不可欠です。Google の smtp-relay のような多くの SMTP サーバーは、`EHLO localhost` で接続を拒否します。この設定により、HELO/EHLO コマンドが完全修飾ドメイン名 (FQDN) を使用するようになります。
* これらの設定を追加または変更した後、アプリを再構築してください。
1. ```
cd /var/discourse
./launcher rebuild app
管理パネルからテストメールを送信して、設定をテストしてください。注意: discourse-doctor は、通常のアプリのメールパイプラインをバイパスする方法により、一部の特定の構成では失敗する可能性がありますが、管理パネルのテストの方が信頼性が高いです。
さらに、SMTP サーバーからの拒否を避けるために、ドメインの DNS レコード (SPF、DKIM、DMARC など) が正しく構成されていることを確認してください。
役立つリソース:
追加情報:
「ファイルの終端に達しました」というメッセージは、SMTP ハンドシェイクが失敗したか、突然終了した場合によく表示されます。正しいドメイン設定 (DISCOURSE_SMTP_DOMAIN) と再構築により、ほとんどの構成でこれらの問題は解決されるはずです。ただし、常にメールプロバイダーのドキュメントを参照して、サーバー固有のニュアンスを確認してください。
これが自動応答からの回答ですが、smtp ドメインを試すのは試す価値があると思います。
「いいね!」 1
philion
(Paul Philion)
2025 年 3 月 9 日午後 3:48
5
トーマス様
サポートフォーラムで465に関する多くの議論があります。私の読んだところによると、DiscourseはSSLとTLSをSMTP経由で利用する際に多くの仮定をしており、詳細な動作を制御する環境変数がいくつかあるようです。
しかしながら、これらのフォーラムで報告されているエラーや関連する質問の数から、これらの設定は文書化が悪く、使用が困難であるという強い印象を受けています。そして、2017年から同様の問題が見られることから、これは長年問題となっています。
「ポート465」または「Net::ReadTimeout smtp」で検索すると、同様の問題の長いリストが表示されます。
philion
(Paul Philion)
2025 年 3 月 9 日午後 4:18
7
トーマス、
Dockerビルドでこのファイルを見つけようとしていますが、見つかりません。コンテナにラップされていることはわかっていますが、discourse/discourseではなくdiscourse/discourse_dockerをクローンしました。
launcher enter appでアプリに入ろうとしても、そのファイルを編集する方法もviをインストールする方法もありません。
デバッグログをオンにして./discourse-doctorを実行するためのドキュメントやフラグが見つかりません。
同じように失敗します。メールを送信できません。./discourse-doctorは同じエラーを報告します。
philion
(Paul Philion)
2025 年 3 月 9 日午後 4:19
8
app.yml を提案通り更新し、アプリを再構築しました(メールなし)。./discourse-doctor を実行しましたが、同じエラーメッセージが表示されました。
thoka
(Thomas Kalka)
2025 年 3 月 9 日午後 4:20
9
./launcher enter app
sudo apt update && sudo apt install neovim -y
で解決するはずです。
philion
(Paul Philion)
2025 年 3 月 9 日午後 4:31
10
ありがとうございます!「sudo apt install vi」ができないと、かなり時代遅れになってしまいます。今は neovim と呼ばれることを覚えておく必要があります。
philion
(Paul Philion)
2025 年 3 月 9 日午後 4:39
11
スタックトレースのダンプという提案を受けて、以下を提示します。
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'
thoka
(Thomas Kalka)
2025 年 3 月 9 日午後 4:53
12
「いいね!」 1
philion
(Paul Philion)
2025 年 3 月 9 日午後 6:51
14
パスワードを記号なしで更新し、SMTP認証の伝播遅延(昼食をとるのに十分な時間)を待ってから、swaksでメールを正しく送信するために適切な認証情報を確認しましたが…
同じエラーが発生しました。
再構築するとスタックトレースのダンプが削除されることに気づいたので、それを元に戻して ./launcher destroy app && ./launcher start app を試してみます。
「いいね!」 1
philion
(Paul Philion)
2025 年 3 月 9 日午後 6:59
15
デバッグトレースをインストールし、ドクターを実行しました。
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!'
thoka
(Thomas Kalka)
2025 年 3 月 9 日午後 7:02
16
ログイン名として完全なメールアドレスを使用してみましたか?
philion
(Paul Philion)
2025 年 3 月 9 日午後 7:11
17
app.yml を更新して、ユーザーとしてフルメールを使用するようにし、./launcher destroy app && ./launcher start app で再デプロイしました。
同じエラーが発生しています: http://talk.burlyqna.org/ZDg1YWE1YTA2YWU1Zjhj.txt
destroy と start でデバッグ情報も消去されましたが、同じ問題だと仮定します。
case rv = @io.read_nonblock(BUFSIZE, tmp, exception: false)
が nil を返し、それが EOF および非/エラー応答につながります。
philion
(Paul Philion)
2025 年 3 月 10 日午後 6:24
18
多くのテストと @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
philion
(Paul Philion)
2025 年 3 月 13 日午後 11:46
19
最終確認:メールが動作しました!
途中で発生した問題:
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
system
(system)
クローズされました:
2025 年 4 月 12 日午後 11:46
20
This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.