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

I can’t get SMTP setup working with Discourse and GMail’s SMTP

I enabled SMTP Relay in Google’s settings, allowed sending from my domain (no IP whitelisting), using SMTP auth + encryption.

Discourse is hosted on forum.example.com

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

I had generic error Job exception: end of file reached, when I added NOTIFICATION_EMAIL and SMTP_DOMAIN envs, now I’m seeing

503 5.5.1 bad sequence of commands x20sm63393lfr.126 - gsmtp

when running doctor and trying to send email to myself.

Changed DISCOURSE_SMTP_DOMAIN to match forum.mydomain.io and still have the same error.

How I’m supposed to debug this further other than changing env, rebuilding and hoping that it works?

Thanks in advance.

Instead of rebuilding you can

./launcher destroy app 
./launcher start app 

There are some topics about getting the Google whatever working. It’s possible, but not easy. And it probably changes every month. :wink:

3 „Gefällt mir“

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?