Probleme beim Mailversand an SMTP-Relay

Hallo,
wir haben Probleme beim Senden von E-Mails über ein SMTP-Relay, für das kein Benutzername und kein Passwort erforderlich sind. Ich kann E-Mails mit mailx / sendmail an das Relay senden.
Dies sind die Einstellungen.

 DISCOURSE_SMTP_ADDRESS: xyz.example.com (geschwärzt)
 DISCOURSE_SMTP_PORT: 587
 DISCOURSE_SMTP_AUTHENTICATION: plain

Was ich vom discourse_doctor zurückbekomme, gibt diesen Fehler aus.

Net::ReadTimeout

Es scheint mir, als ob die SMTP-Nachricht falsch erstellt ist, da wir Dinge senden, aber nichts über Port 587 zurückbekommen. Dies ist mit einem Wireshark-Trace beweisbar.

Können Sie bitte erläutern, wie man mehr detaillierte Protokollierung oder zusätzliche Debugging-Informationen aktiviert, damit wir das Problem weiter analysieren können? Die normalen Protokolle sagen mir nichts. Ich habe einen Backtrace gefunden, aber ich bin kein Ruby-Entwickler und kann ihn nicht interpretieren.

/usr/local/lib/ruby/3.2.0/net/protocol.rb:229:in `rbuf_fill'

/usr/local/lib/ruby/3.2.0/net/protocol.rb:199:in `readuntil'

/usr/local/lib/ruby/3.2.0/net/protocol.rb:209:in `readline'

net-smtp-0.3.3/lib/net/smtp.rb:1057:in `recv_response'

net-smtp-0.3.3/lib/net/smtp.rb:659:in `block in do_start'

net-smtp-0.3.3/lib/net/smtp.rb:1067:in `critical'

net-smtp-0.3.3/lib/net/smtp.rb:659:in `do_start'

net-smtp-0.3.3/lib/net/smtp.rb:611:in `start'

/var/www/discourse/vendor/bundle/ruby/3.2.0/bundler/gems/mail-5b700fc95ee6/lib/mail/network/delivery_methods/smtp.rb:109:in `start_smtp_session'

/var/www/discourse/vendor/bundle/ruby/3.2.0/bundler/gems/mail-5b700fc95ee6/lib/mail/network/delivery_methods/smtp.rb:100:in `deliver!'

/var/www/discourse/vendor/bundle/ruby/3.2.0/bundler/gems/mail-5b700fc95ee6/lib/mail/message.rb:269:in `deliver!'

/usr/local/lib/ruby/3.2.0/delegate.rb:87:in `method_missing'

/var/www/discourse/lib/email/sender.rb:286:in `send'

/var/www/discourse/app/jobs/regular/user_email.rb:79:in `send_user_email'

/var/www/discourse/app/jobs/regular/user_email.rb:39:in `execute'

/var/www/discourse/plugins/chat/lib/chat/user_email_extension.rb:6:in `execute'

/var/www/discourse/app/jobs/base.rb:249:in `block (2 levels) in perform'

rails_multisite-4.0.1/lib/rails_multisite/connection_management.rb:80:in `with_connection'

/var/www/discourse/app/jobs/base.rb:236:in `block in perform'

/var/www/discourse/app/jobs/base.rb:232:in `each'

/var/www/discourse/app/jobs/base.rb:232:in `perform'

sidekiq-6.5.8/lib/sidekiq/processor.rb:202:in `execute_job'

sidekiq-6.5.8/lib/sidekiq/processor.rb:170:in `block (2 levels) in process'

sidekiq-6.5.8/lib/sidekiq/middleware/chain.rb:177:in `block in invoke'

/var/www/discourse/lib/sidekiq/pausable.rb:134:in `call'

sidekiq-6.5.8/lib/sidekiq/middleware/chain.rb:179:in `block in invoke'

sidekiq-6.5.8/lib/sidekiq/middleware/chain.rb:182:in `invoke'

sidekiq-6.5.8/lib/sidekiq/processor.rb:169:in `block in process'

sidekiq-6.5.8/lib/sidekiq/processor.rb:136:in `block (6 levels) in dispatch'

sidekiq-6.5.8/lib/sidekiq/job_retry.rb:113:in `local'

sidekiq-6.5.8/lib/sidekiq/processor.rb:135:in `block (5 levels) in dispatch'

sidekiq-6.5.8/lib/sidekiq.rb:44:in `block in <module:Sidekiq>'

sidekiq-6.5.8/lib/sidekiq/processor.rb:131:in `block (4 levels) in dispatch'

sidekiq-6.5.8/lib/sidekiq/processor.rb:263:in `stats'

sidekiq-6.5.8/lib/sidekiq/processor.rb:126:in `block (3 levels) in dispatch'

sidekiq-6.5.8/lib/sidekiq/job_logger.rb:13:in `call'

sidekiq-6.5.8/lib/sidekiq/processor.rb:125:in `block (2 levels) in dispatch'

sidekiq-6.5.8/lib/sidekiq/job_retry.rb:80:in `global'

sidekiq-6.5.8/lib/sidekiq/processor.rb:124:in `block in dispatch'

sidekiq-6.5.8/lib/sidekiq/job_logger.rb:39:in `prepare'

sidekiq-6.5.8/lib/sidekiq/processor.rb:123:in `dispatch'

sidekiq-6.5.8/lib/sidekiq/processor.rb:168:in `process'

sidekiq-6.5.8/lib/sidekiq/processor.rb:78:in `process_one'

sidekiq-6.5.8/lib/sidekiq/processor.rb:68:in `run'

sidekiq-6.5.8/lib/sidekiq/component.rb:8:in `watchdog'

sidekiq-6.5.8/lib/sidekiq/component.rb:17:in `block in safe_thread'

Ich habe die Anwendung auf die neueste stabile Version herabgestuft, was dieses Problem nicht gelöst hat. Derjenige, der sich vorher darum gekümmert hat, ist im PTO, daher kann ich nicht sagen, auf welche Version dies vor dem letzten Update war. Ich habe auch festgestellt, dass es kürzlich Codeänderungen im Mail-Bereich gab. Vielleicht Probleme dort?

Vielen Dank

1 „Gefällt mir“

Möglicherweise treten in Ihrer Mail-Engine Timeouts auf, dies wurde in einem anderen aktuellen Thema erwähnt. Postfix hat offenbar standardmäßig ein 5-Sekunden-Timeout.

Es hat mich mehrere Tage des Kopfzerbrechens gekostet, um E-Mail-Antworten und -Posts zum Laufen zu bringen. Viele kleine Dinge müssen sowohl innerhalb von Discourse als auch auf Ihrem Mailserver richtig eingestellt werden, einschließlich Mailer-Einstellungen und Firewall-Einstellungen.

Und ich habe noch nicht einmal begonnen, mich mit Mailer-Problemen zu befassen, insbesondere damit, bei mehreren ISPs auf der Whitelist zu stehen. Ich habe SPF und DKIM zum Laufen gebracht.

Danke für die Antwort, ja, aber ich suche nach etwas, das mir sagt, was das Problem ist. Es ist knifflig, da der Wireshark-Trace zeigt, dass die E-Mail gesendet wird, aber keine Antwort gegeben wird. Normale E-Mails, die Linux sendmail verwenden, funktionieren ohne Probleme. SPF und DKIM sind ebenfalls auf der jeweiligen Domain eingerichtet. Ich kann das Problem in der Rails-Konsole reproduzieren.

message = TestMailer.send_test("ycxi@examle.com")
Email::Sender.new(message, :test_message).send

Ich bin überhaupt kein Ruby-Experte, ich werde sehen, ob ich etwas ausführlichere Protokolle als einen Stack-Trace erhalten kann:

[5] pry(main)> wtf?
Exception: Net::ReadTimeout: Net::ReadTimeout

Wir haben ein ähnliches Problem behoben, indem wir die SMTP-Timeout-Schwellenwerte in der Datei app.yml erhöht haben. Siehe dieses Thema:

So wurde die app.yml modifiziert:
image

Nachdem die yaml geändert wurde, wurde die App neu erstellt:
sudo ./launcher destroy app && sudo ./launcher start app

Die Änderung spiegelt sich in der GUI wider: