SMTP-Einrichtung funktioniert nicht mit GMail's smtp-relay

Ich bekomme das SMTP-Setup mit Discourse und GMail’s SMTP nicht zum Laufen.

Ich habe SMTP Relay in den Google-Einstellungen aktiviert, das Senden von meiner Domain erlaubt (ohne IP-Whitelisting) und SMTP-Authentifizierung mit Verschlüsselung verwendet.

Discourse wird auf forum.example.com gehostet.

DISCOURSE_SMTP_ADDRESS: smtp-relay.gmail.com
DISCOURSE_SMTP_PORT: 587
DISCOURSE_SMTP_USER_NAME: noreply@example.com
DISCOURSE_SMTP_PASSWORD: password
DISCOURSE_SMTP_AUTHENTICATION: login
DISCOURSE_SMTP_DOMAIN: mydomain.io
DISCOURSE_NOTIFICATION_EMAIL: noreply@example.com
DISCOURSE_SMTP_ENABLE_START_TLS: true

Zunächst erhielt ich den generischen Fehler Job exception: end of file reached. Nachdem ich die Umgebungsvariablen NOTIFICATION_EMAIL und SMTP_DOMAIN hinzugefügt hatte, erscheint nun folgender Fehler beim Ausführen von doctor und beim Versuch, eine E-Mail an mich selbst zu senden:

503 5.5.1 bad sequence of commands x20sm63393lfr.126 - gsmtp

Ich habe DISCOURSE_SMTP_DOMAIN auf forum.mydomain.io geändert, aber der Fehler bleibt derselbe.

Wie kann ich das Problem sonst noch debuggen, ohne ständig Umgebungsvariablen zu ändern, neu zu bauen und zu hoffen, dass es funktioniert?

Vielen Dank im Voraus.

Anstatt neu zu bauen, kannst du folgendes tun:

./launcher destroy app 
./launcher start app 

Es gibt einige Themen dazu, wie man das Google-Ding zum Laufen bekommt. Das ist möglich, aber nicht einfach. Und es ändert sich wahrscheinlich jeden Monat. :wink:

Obwohl ich glaube, dass der Fehler von @kvsf entweder bereits behoben wurde oder einige grundlegende Dinge in Ihrer Konfiguration geändert wurden, möchte ich diesen Thread fortsetzen, indem ich meine eigene Konfiguration, meinen weiteren Ansatz und meine Bitte um Hilfe im selben Problembereich poste.

Grundlegende Konfiguration

  • Google Workspace Business Starter
  • Gmail-Routing konfigurieren > SMTP-Relay mit i) nur registrierten Benutzern aus der Domäne, ii) IP-Whitelisting mit der IP meines Foren-Hosting-Servers und Erzwingung der SMTP-Authentifizierung, iii) Erzwingung von TLS
  • Discourse Docker-Installation gemäß Discourse-Dokumentation
  • app.yml-Konfiguration gemäß
expose:
  - "80:80"   # http
  - "443:443" # https

env:
  DISCOURSE_HOSTNAME: "forum.mydomain.com"
  DISCOURSE_DEVELOPER_EMAILS: 'dev@mydomain.com'

  DISCOURSE_SMTP_ADDRESS: "smtp-relay.gmail.com"
  DISCOURSE_SMTP_PORT: 587
  DISCOURSE_SMTP_USER_NAME: "user@mydomain.com"
  DISCOURSE_SMTP_PASSWORD: "mypass"
  DISCOURSE_SMTP_ENABLE_START_TLS: true
  DISCOURSE_SMTP_AUTHENTICATION: login
  DISCOURSE_SMTP_OPEN_TIMEOUT: 25
  DISCOURSE_SMTP_READ_TIMEOUT: 25
  DISCOURSE_SMTP_DOMAIN: "mydomain.com"
  DISCOURSE_NOTIFICATION_EMAIL: "noreply@mydomain.com"
  LETSENCRYPT_ACCOUNT_EMAIL: dev@mydomain.com

Meine Tests

Beim Ausführen von ./discourse-doctor führt diese Konfiguration zu dem Fehler:

Testing sending to ...
SMTP server connection successful.
Sending to artificial.testadress@gmail.com. . .
Sending mail failed.
end of file reached

Ich habe dann zuerst die verschiedenen Discourse- und E-Mail-Protokolle überprüft.
Der manuelle Test desselben Prozesses von innerhalb von Docker (durch Verbindung mit docker exec -it <CONTAINER_ID> bash) über

openssl s_client -starttls smtp -crlf -connect smtp.gmail.com:587

tritt keine Probleme auf und funktioniert einwandfrei. Ich glaube daher, dass entweder meine Parameterkonfiguration in der app.yml seltsam ist ODER Discourse intern eine Skript-Fehlkommunikation hat ODER … so viele Möglichkeiten. ^^
Um nicht immer ./launcher rebuild app ausführen zu müssen, nachdem ich app.yml geändert habe, um verschiedene Einstellungen zu testen, habe ich begonnen, /var/www/discourse/vendor/bundle/ruby/3.2.0/gems/mail-2.8.1/lib/mail/network/delivery_methods/smtp.rb direkt zu bearbeiten, indem ich den vorhandenen Code zu:

class SMTP
  attr_accessor :settings

  DEFAULTS = {
    :address              => 'smtp-relay.gmail.com',
    :port                 => 587,
    :domain               => 'mydomain.com',
    :user_name            => 'user@mydomain.com',
    :password             => 'mypass',
    :authentication       => 'login',
    :enable_starttls      => nil,
    :enable_starttls_auto => true,
    :openssl_verify_mode  => 'peer',
    :ssl                  => nil,
    :tls                  => nil,
    :open_timeout         => 25,
    :read_timeout         => 25
  }

  def initialize(values)
    self.settings = DEFAULTS #.merge(values)
  end

was zum gleichen Verhalten wie oben führt (bei den angepassten app.yml-Einstellungen).

Suche nach Hilfe

Und jetzt stecke ich fest. Natürlich könnte ich mehr mit den verbleibenden Einstellungen spielen (und könnte sogar wieder auf die ausschließliche Verwendung von SSL umsteigen, obwohl dies von Discourse als veraltet gilt), aber ich möchte:

  1. lernen, wie man dieses Problem tiefer und weiter analysiert
  2. dadurch verstehen, was wirklich vor sich geht und was das Problem ist
  3. es beheben und alles reibungslos nutzen können (+ endlich das Forum richtig zum Laufen bringen)

Vielen Dank im Voraus für Ihre Hilfe.

push*
Irgendwelche Ideen/Vorschläge?

Wurde das behoben? Ich möchte genau das Gleiche tun und habe diesen Beitrag gefunden, der mir Sorgen bereitet.

Ich bin mir bei Gmail nicht sicher, aber Zoho funktioniert nicht und Outlook hat auf einer E-Commerce-Website, an deren Verwaltung ich beteiligt war, die Funktion eingestellt.

Es ist schon seit Längerem bewährte Praxis, einen transaktionalen E-Mail-Dienst wie Mailersend zu verwenden, aber es wird mit der Zeit immer mehr zur Anforderung.

Ergänzung zur Klarstellung: Es handelt sich um eine Sperre auf Seiten des E-Mail-Anbieters und nicht um etwas, das in Discourse oder auf Serverseite behoben werden kann. Die meisten Anbieter unterstützen die Verwendung von SMTP zum Senden transaktionaler E-Mails nicht mehr, falls sie dies jemals offiziell getan haben.