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
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.
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.
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.
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.