Discourse-Doktor-Parsing von SMTP-Anmeldeinformationen funktioniert nicht (+ Admin-Registrierungs-E-Mail funktioniert nicht)

Nun, um zu beginnen: Dies ist die Produktionsumgebung, und ich kann die erste Registrierungs-E-Mail nicht versenden.

Ich bin mir sicher, dass meine SMTP-Einstellungen korrekt sind.
Ich kann meinen Mailserver mit der verwendeten Portnummer anpingen und per Telnet verbinden, aber sobald ich „EHLO mailserver

[quote=“simbleau, post:1, topic:174461”]
sobald ich „EHLO mailserver

Diese Adresse sieht nicht nach einer SMTP-Adresse aus.
Ich vermute, dass “mail.redacted.com” die HTTP-Adresse ist.
Ich denke, du musst das überprüfen.

@irwinstar, ich habe den tatsächlichen Mailserver entfernt, um zu vermeiden, dass mein Mailserver auf einem öffentlichen Forum offengelegt wird. Ich kann jedoch garantieren, dass die Angaben korrekt sind, da ich die Einstellungen von meinem funktionierenden Mailclient kopiert und sie zudem mit den SMTP-Einstellungen meines tatsächlichen Mailservers verglichen habe.

Vielen Dank für dein Hilfsangebot. Ich vermute, das Problem liegt bei den SPF/DKIM-Einträgen, daher versuche ich, diese zu korrigieren.

Trotzdem sollte discourse-doctor sie dennoch korrekt parsen. Ich bin mir nicht sicher, was dort los ist, da ich die Datei nicht selbst in vim/nano bearbeitet habe. Zur Klarstellung: Das YAML wurde mit discourse-setup generiert.

Und ich glaube, Discourse unterstützt das Protokoll in 465 derzeit nicht. Wenn Ihr Mailserver 587 unterstützt, können Sie stattdessen auf 587 umstellen. Leider kann mein Mailserver 587 nicht nutzen, daher habe ich einen Mail-Proxy außerhalb von Discourse eingerichtet.

@irwinstar, falls dies zutrifft, ist dies äußerst wichtige Information und würde erklären, warum meine E-Mail-Einrichtung nicht funktioniert. Haben Sie eine Quelle für diese Information?

Ich bin mir nicht ganz sicher, aber ich habe es einige Male mit Port 465 versucht.
Schließlich verwende ich das Docker-Image „hieulq/mailproxy“ als Mail-Proxy.
Und ich nutze diese app.yml-Einstellung für Discourse:
Diese Vorgehensweise mag nicht ideal sein, aber sie funktioniert.
Ich habe heute nach einem Mail-Plugin gesucht, konnte aber keines finden.

  DISCOURSE_SMTP_ADDRESS: x.x.x.x
  DISCOURSE_SMTP_PORT: 2525
  DISCOURSE_SMTP_AUTHENTICATION: none
  DISCOURSE_SMTP_OPENSSL_VERIFY_MODE: none
  DISCOURSE_SMTP_ENABLE_START_TLS: false

Hey @simbleau

Meine Erfahrung ist, dass SendGrid gut funktioniert (Port 587).

Du kannst SendGrid auch kostenlos testen!

Danke für die Vorschläge.

Ich möchte keine Cloud-Mailserver kaufen oder Proxies verwenden (denn wenn ich eine schmutzige Lösung wollte, würde ich mir jetzt einfach ein Admin-Konto besorgen), da ich bereits einen Mailserver bei HostGator habe.

Ich bin mir sicher, dass die SPF-Einträge für die IP-Adresse meines Discourse-Servers eingerichtet sind. Ich versuche jetzt hauptsächlich, die DKIM-Einträge zu validieren.

Wenn jemand bestätigen kann, dass Port 465 nicht erlaubt ist, wäre das fantastische Neuigkeiten, da es mich davon abhalten würde, zu weit in das Kaninchenloch eines nicht existierenden Problems zu klettern. Port 465 war ein Problem, wie im folgenden Beitrag erwähnt.

Ich habe bei der Installation bereits einige Fortschritte erzielt.

Über Port 587 kann ich eine komplette E-Mail erfolgreich per Telnet versenden und die Authentifizierung funktioniert einwandfrei. Deshalb habe ich den Port gewechselt.

Jetzt, wenn die E-Mail versendet wird, erhalte ich folgende Fehlermeldung:

Delivered mail d86b48cc-b0f4-4df3-8960-ab5ff96613a0@discourse.imbleau.com (251.0ms)
Job exception: hostname "mail.redacted.com" does not match the server certificate

Mir ist jedoch aufgefallen, dass dies kein Verbindungs-Timeout mehr ist (das nach ganzen 60 Sekunden ausgelöst wird), sondern eine andere Ausnahme, die bereits nach 250 ms auftritt.

Das liegt wahrscheinlich daran, dass ich eine E-Mail-Adresse wie system@discourse.redacted.com verwendet habe, diese intern jedoch mail.redacted.com als E-Mail-Server nutzt.

Ehrlich gesagt bin ich mir nicht sicher, wie ich das beheben soll. Ich habe Folgendes versucht:

./launcher enter app
rails r "SiteSetting.notification_email = 'system@mail.redacted.com'"
exit

und anschließend das System neu aufgebaut, um es nur für diesen einen Versuch zu verwenden. Trotzdem keine Besserung. Der gleiche Fehler tritt weiterhin auf.

DAS EMAIL-PROBLEM BEHEBT! (discourse-doctor analysiert immer noch falsch)

Ich habe mich etwas mehr mit Ruby beschäftigt und recherchiert, warum dieser Fehler im Hintergrund auftrat, was mich zu diesem Stackoverflow-Eintrag führte.

Das war der Übeltäter. Die Lösung bestand darin, die SSL-Aushandlung zu ändern, was mir die Idee gab, diese Einstellung in der app.yml-Datei zu deaktivieren:
DISCOURSE_SMTP_ENABLE_START_TLS: false # (optional, Standard: true)

Danach: ERFOLG!

Dadurch wird die TLS-Verschlüsselung deaktiviert, wobei das eigentliche Problem darin besteht, dass Sie einen falschen Hostnamen verwenden. Der Mailserver präsentiert nämlich ein Zertifikat, das einen anderen Namen als mail.redacted.com angibt. Viele E-Mail-Server sind unter mehreren verschiedenen Hostnamen bekannt; Sie müssen lediglich herausfinden, welcher für das Zertifikat verwendet wird.

Sie könnten versuchen, herauszufinden, welchen Hostnamen der Server angibt, und Ihre Konfiguration entsprechend anpassen.

echo | openssl s_client -connect mail.redacted.com:587 -starttls smtp -servername mail.redacted.com 2>/dev/null |openssl x509 -noout -subject

Falls dies nicht funktioniert, können Sie die TLS-Verschlüsselung aktiviert lassen und NUR die Zertifikatsüberprüfung deaktivieren:

DISCOURSE_SMTP_ENABLE_START_TLS: true
DISCOURSE_SMTP_OPENSSL_VERIFY_MODE: false

Danke @RGJ! Seltsamerweise besagt es, dass der CN eine meiner Subdomains ist, die nichts mit E-Mail zu tun hat. Das lohnt sich zu untersuchen. Vielen Dank für die Anleitung.

Alle Ihre Benutzer erhalten dieselben Informationen.

Wenn Sie mir privat Ihre app.yml senden, schaue ich mir an, was discourse-doctor verwirrt.

Gesendet. Versuch es einfach mal.

Ah. Das Problem ist, dass du eine andere Version von awk als GNU awk hast und die Option --field-separator in deinem awk anders heißt.

Welche Version von awk hast du? Welches Betriebssystem verwendest du?

man awk zeigt mir Version 1.3.4 2019-12-31 MAWK(1)

cat /etc/os-release gibt Folgendes aus:

~$ cat /etc/os-release 
NAME="Ubuntu"
VERSION="20.04.1 LTS (Focal Fossa)"
ID=ubuntu
ID_LIKE=debian
PRETTY_NAME="Ubuntu 20.04.1 LTS"
VERSION_ID="20.04"
HOME_URL="https://www.ubuntu.com/"
SUPPORT_URL="https://help.ubuntu.com/"
BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"
PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy"
VERSION_CODENAME=focal
UBUNTU_CODENAME=focal

Würdest du versuchen, discourse-doctor zu bearbeiten und --field-separator durch -F zu ersetzen?

Es sieht so aus, als würde das das Problem lösen. Wenn du das bestätigst, werde ich einen PR einreichen.

Das hat teilweise funktioniert. Der Fehler ist verschwunden, aber es wird nichts mehr zurückgegeben.

==================== YML-EINSTELLUNGEN ====================
DISCOURSE_HOSTNAME=
SMTP_ADDRESS=
DEVELOPER_EMAILS=
SMTP_PASSWORD=
SMTP_PORT=
SMTP_USER_NAME=
LETSENCRYPT_ACCOUNT_EMAIL=

Ich habe es gelöst.

Ändere in discourse-doctor Zeile 213 wie folgt:

  read_config_result=$(echo $config_line | awk  -F ":" '{print $2}')

Das funktioniert, weil mawk -F=":" nicht mag und stattdessen ein Leerzeichen verlangt, also -F ":". :roll_eyes:

Ein PR wurde eröffnet: https://github.com/discourse/discourse_docker/pull/513