Nach der Installation kann Curl E-Mails senden, aber Discourse nicht. Hilfe zur Behebung?

Hallo!

Ersetze im folgenden Text \u003cDOT\u003e durch . – da ich ein neuer Benutzer bin, erlaubt Discourse mir nicht, Links zu posten.

Ich habe Discourse auf einem neu erstellten Hetzner-Cloud-Server installiert, und die URL wird korrekt aufgelöst: forum\u003cDOT\u003ethewizardofosc\u003cDOT\u003ecom

Allerdings wird die E-Mail, mit der ich mich registriert habe, nie gesendet. In der Protokolldatei steht bei Discourses Logmeldung „Net::ReadTimeout“ – falls das etwas aussagt.

telnet verbindet sich – das Eingeben von "telnet mail\u003cDOT\u003ethewizardofosc\u003cDOT\u003ecom 465" führt zu "Connected to thewizardofosc\u003cDOT\u003ecom".

Auch Curl sendet eine E-Mail erfolgreich!

Das Eingeben des Folgenden:
curl --ssl smtps://mail\u003cDOT\u003ethewizardofosc\u003cDOT\u003ecom --mail-from discourse@thewizardofosc\u003cDOT\u003ecom --mail-rcpt \u003cVARIOUS WORKED\u003e --upload-file email.txt --user 'discourse@thewizardofosc\u003cDOT\u003ecom:\u003cPASSWORD\u003e'

wird erfolgreich gesendet.

Warum funktioniert es dann bei Discourse nicht?

Im Folgenden sind die Abschnitte aus meiner App-Datei, die meiner Meinung nach relevant sind:

## Bei der ersten Anmeldung Beispiel 'user1@example.com,user2@example.com'
DISCOURSE_DEVELOPER_EMAILS: 'iliasb@thewizardofosc\u003cDOT\u003ecom'

## TODO: Der SMTP-Mailserver, der zur Validierung neuer Konten und zum Senden von Benachrichtigungen verwendet wird
# SMTP-Adresse, Benutzername und Passwort sind erforderlich
# WARNUNG: Das Zeichen '#' im SMTP-Passwort kann Probleme verursachen!
DISCOURSE_SMTP_ADDRESS: mail\u003cDOT\u003ethewizardofosc\u003cDOT\u003ecom
DISCOURSE_SMTP_PORT: 465
DISCOURSE_SMTP_USER_NAME: discourse@thewizardofosc\u003cDOT\u003ecom
DISCOURSE_SMTP_PASSWORD: \u003cPASSWORD\u003e
#DISCOURSE_SMTP_ENABLE_START_TLS: true           # (optional, Standardwert true)

## Wenn du die Lets-Encrypt-Vorlage hinzugefügt hast, unten den Kommentar entfernen, um ein kostenloses SSL-Zertifikat zu erhalten
LETSENCRYPT_ACCOUNT_EMAIL: me@example\u003cDOT\u003ecom

Ich müsste das Fehlerprotokoll sehen, um zu prüfen, was bei Ihrer E-Mail-Einrichtung los ist.

Ich habe die Schritte hier durchgegangen: Troubleshoot email on a new Discourse install - #2

Leider ohne Erfolg. Die Ausführung von discourse-doctor ergibt denselben Output: Net::ReadTimeout, den ich auch in shared/standalone/log/rails/production.log sehe.

Hallo!

Meinst du shared/standalone/log/rails/production.log?

Dort erhalte ich:

Delivered mail 5208d56b-b84b-4de6-a13e-76b60179af46@forum.thewizardofosc.com (60142,6ms)
Job-Ausnahme: Net::ReadTimeout

Seltsam. Wenn Sie von außerhalb des Containers eine Verbindung herstellen können, können Sie prüfen, ob der curl-Befehl auch innerhalb des Containers funktioniert. Meine einzige Vermutung ist, dass Sie ein Netzwerkproblem mit Docker haben.

Jay hat recht.

Der logische nächste Schritt, @onar3d, besteht darin, Ihren curl-Test von innerhalb des Containers auszuführen.

Ich habe es gerade für Sie geprüft: curl ist bereits im Container installiert, sodass Sie es zumindest nicht installieren müssen.

docker exec -it app bash
root@hostname-app/# curl --version
curl 7.64.0 (x86_64-pc-linux-gnu) libcurl/7.64.0 OpenSSL/1.1.1d zlib/1.2.11 libidn2/2.0.5 libpsl/0.20.2 (+libidn2/2.0.5) libssh2/1.8.0 nghttp2/1.36.0 librtmp/2.3
Release-Date: 2019-02-06
Protocols: dict file ftp ftps gopher http https imap imaps ldap ldaps pop3 pop3s rtmp rtsp scp sftp smb smbs smtp smtps telnet tftp 
Features: AsynchDNS IDN IPv6 Largefile GSS-API Kerberos SPNEGO NTLM NTLM_WB SSL libz TLS-SRP HTTP2 UnixSockets HTTPS-proxy PSL 

Ich hoffe, das hilft.

Interessanter Vorschlag!

Aber ich habe Docker mit “docker exec -it DOCKERID bash” betreten und denselben curl-Befehl verwendet, der ebenfalls funktioniert hat.

Vielen Dank, ich habe es gerade ausprobiert und es hat einwandfrei funktioniert!

Also kann es nicht sein, dass Docker blockiert ist…

Hallo @onar3d

Das ist zwar ein wenig spekulativ, aber da du Port 465 statt Port 587 verwendest, könntest du dies in deiner Container-Datei yml versuchen:

DISCOURSE_SMTP_ENABLE_START_TLS: false

Baut den Container neu und hoffentlich hast du Glück :slight_smile:

Referenz:

GMail (zum Vergleich) stellt folgende Ports und Authentifizierungsmethoden bereit.

  • TLS/STARTTLS (manchmal auch explizites TLS genannt): verwendet Port 587
  • SSL (manchmal auch implizites TLS genannt): verwendet Port 465

… wir wagen den Wurf bei diesem Versuch… :slight_smile: aber vielleicht haben wir Glück

Falls nicht, kannst du immer wieder zurückkehren.

1 „Gefällt mir“

Vielen Dank!

Ich habe es gerade versucht, aber die E-Mail wurde von Discourse nicht gesendet :confused:

Ja, das war eher eine Fernschätzung…… Entschuldigung, dass ich deine Zeit damit verschwendet habe!

Meine einzige andere „verrückte Idee

Danke! Leider habe ich keinen Zugriff, um das zu ändern. Es ist eine dieser „schlüsselfertigen

Hallo @onar3d

Alles klar. Im Moment bin ich mit „verrückten Ideen

Nach ein paar weiteren Versuchen (vielen Dank an @IAmGav!) wurde bestätigt, dass meine Discourse-Installation mit einem anderen E-Mail-Server funktioniert, was eine Reihe von möglichen Ursachen ausschließt.

Mein E-Mail-Server-Anbieter hat sich mit einer Fehlerprotokollmeldung und einem Vorschlag von seiner Seite zurückgemeldet:

Der Techniker hat die Protokolle geprüft, und der Fehler, der von ihrer IP-Adresse aus auftritt, liegt an den SSL-Einstellungen. Höchstwahrscheinlich werden eine alte Version oder veraltete Verbindungseinstellungen verwendet.

Nachweis:
TLS-Fehler bei der Verbindung von [95.216.139.49]:33568 SSL_accept: TCP-Verbindung vom Peer geschlossen

Versuchen Sie es vorübergehend mit deaktiviertem SSL-Modus, um zu sehen, ob es funktioniert.

Ich habe es mit DISCOURSE_SMTP_ENABLE_START_TLS auf false gesetzt, wie oben empfohlen, sowohl auf Port 465 als auch auf Port 26 (von meinem Anbieter als Port für Nicht-SSL-Verbindungen angegeben), aber beides funktionierte nicht.

Könnte es daran liegen, dass ich kein SSL-Zertifikat für die Domain thewizardofosc.com gekauft habe? Mir ist das jetzt erst nach etwas weiterer Recherche klar geworden.

Wenn es mit der Option ohne SSL nicht funktioniert, wird es auch mit einem kostenpflichtigen SSL-Zertifikat nicht funktionieren. Ihr E-Mail-Host sollte Ihnen ein kostenloses SSL-Zertifikat von Let’s Encrypt bereitstellen.

Hallo @onar3d,

Du könntest deine curl-Tests mit der Verbose-Option -v durchführen, um den erfolgreichen Handshake vollständig analysieren zu können. Anschließend kannst du rückwärts von dieser Analyse arbeiten.

Mit dieser Verbose-Option kannst du herausfinden, was funktioniert :slight_smile:

HTH