SMTP-Fehler: STARTTLS-Befehl muss zuerst ausgegeben werden

I am trying to configure Discourse 2.7.0.beta4 with the Mailersend SMTP service.

After running ./discourse-doctor I got the error below.

SMTP error: Must issue a STARTTLS command first

This is my current app.yml configuration regarding SMTP.

  DISCOURSE_SMTP_ADDRESS: 'smtp.mailersend.net'
  DISCOURSE_SMTP_PORT: 587
  DISCOURSE_SMTP_USER_NAME: username@subdomain.domain.org
  DISCOURSE_SMTP_PASSWORD: mypasswordhere
 #DISCOURSE_SMTP_ENABLE_START_TLS: true           # (optional, default true)
 #DISCOURSE_SMTP_AUTHENTICATION: login
 #DISCOURSE_SMTP_OPENSSL_VERIFY_MODE: none

I’ve already tried to uncomment and set DISCOURSE_SMTP_ENABLE_START_TLS explicitly as true, but the error remains. The same for DISCOURSE_SMTP_AUTHENTICATION: login.

After any change in the YML file I am restarting the system with this:

./launcher destroy app; ./launcher start app

Any tip about what is going on?

Thanks in advance!

I made some changes to discourse-setup recently and also a change to the rake task you’re using (that I think isn’t merged yet).

If you want to give me access to your server I’ll take a look.

2 „Gefällt mir“

As I mentioned via PM, I can’t give access to the server due to security concerns. But thanks very much to @pfaffman for your help and for trying to solve this issue.

Let me add more context to this issue: a previous admin installed Discourse with the Mailgun SMTP service but it stopped to work and I don’t have access to that account.

As I said, I am trying to configure it now with Mailersend. I have read this topic [1] and others about STARTTLS here in the forum, but I am not sure about how to implement the changes needed.

I tried this setting below as well but the errror remains

DISCOURSE_SMTP_OPENSSL_VERIFY_MODE: none

If it is related to some recent update, maybe is it better to consider a downgrade then?

[1] Can't send email with certificate issue - #3 by supermathie

1 „Gefällt mir“

Did you get this working?

No, I have decided to change for another mail service. Now it’s working fine with Mailjet.

1 „Gefällt mir“

Ich habe ein ähnliches Problem. Gestern habe ich drei Stunden lang den E-Mail-Versand auf einer neuen Discourse-Instanz ohne Erfolg debuggt. Ich versuche, E-Mails über Fastmail mit STARTTLS über Port 587 zu senden. Andere Dienste funktionieren mit denselben Anmeldeinformationen.

Ich erhalte bei diesen Einstellungen nicht die Fehlermeldung „Must issue a STARTTLS command first“:

DISCOURSE_SMTP_ADDRESS: 'smtp.fastmail.com'
DISCOURSE_SMTP_PORT: 587
DISCOURSE_SMTP_USER_NAME: 'myuser@fastmail.fm'
DISCOURSE_SMTP_PASSWORD: 'mypass'
DISCOURSE_SMTP_ENABLE_START_TLS: true

…gefolgt von einem ./launcher rebuild app. Wenn ich ./discourse-doctor ausführe und eine E-Mail sende, erhalte ich als Antwort einen Fehler 500 5.5.1 Invalid command.

Heute habe ich begonnen, die Kommunikation mit tcpdump zu verfolgen, und festgestellt, dass Discourse STARTTLS anscheinend nicht verwendet. Hier ist, was passiert, wenn ich eine Grafana-Wiederherstellungs-E-Mail sende:

< 220 smtp.fastmail.com ESMTP ready
> EHLO 9b5ba1569f77
< 250-smtp.fastmail.com
< 250-PIPELINING
< 250-SIZE 71000000
< 250-ENHANCEDSTATUSCODES
< 250-8BITMIME
< 250 STARTTLS
> STARTTLS
< ...[encrypted]

Aber mit Discourse passiert Folgendes:

< 220 smtp.fastmail.com ESMTP ready
> EHLO localhost
< 250-smtp.fastmail.com
< 250-PIPELINING
< 250-SIZE 71000000
< 250-ENHANCEDSTATUSCODES
< 250-8BITMIME
< 250 STARTTLS
> AUTH PLAIN [redacted]
< 500 5.5.1 Invalid command

Es scheint also, dass Discourse meine Anmeldeinformationen im Klartext über das Internet sendet, obwohl STARTTLS in den Einstellungen aktiviert ist? Ist das ein Fehler?

Ich habe auch festgestellt, dass beim Ausführen von ./discourse-doctor die Zusammenfassung „YML SETTINGS“ am Anfang Folgendes auflistet:

==================== YML SETTINGS ====================
DISCOURSE_HOSTNAME=forum.[redacted]
SMTP_ADDRESS=smtp.fastmail.com
DEVELOPER_EMAILS=sysadmin@[redacted]
SMTP_PASSWORD=[redacted]
SMTP_PORT=587
SMTP_USER_NAME=[redacted]@fastmail.fm
LETSENCRYPT_ACCOUNT_EMAIL=

Es gibt jedoch keine Erwähnung von DISCOURSE_SMTP_ENABLE_START_TLS, obwohl es in app.yml gesetzt ist. Ich bin mir nicht sicher, ob dieses Problem damit zusammenhängt.

2 „Gefällt mir“

Das ist seltsam. Ich habe manuell ein Benutzerkonto erstellt (über rake admin:create) und mich dann angemeldet, und plötzlich funktionierten E-Mail-Benachrichtigungen. Das Senden über discourse-doctor schlägt jedoch immer noch fehl.

Ist discourse-doctor vielleicht kaputt?

1 „Gefällt mir“

Es tut mir leid. Ich weiß, wie frustrierend das sein kann.

Das ist möglich. Es macht einige Dinge, um zu versuchen, das Problem zu debuggen, daher könnte es sein, dass die verwendete Logik in Ihrem Fall fehlerhaft ist.

Es gibt auch eine Rake-Aufgabe, die wahrscheinlich eine bessere Wahl für Sie gewesen wäre.

    rake emails:test[x@y.com]

Haben Sie Fehlerbehebung bei E-Mails bei einer neuen Discourse-Installation befolgt?

2 „Gefällt mir“

Ich war mir dieses Befehls nicht bewusst, das scheint in der Tat nützlich zu sein! Das Ergebnis ist jedoch dasselbe:

root@app:/var/www/discourse# rake emails:test redacted@example.com
Testing sending to  using smtp.fastmail.com:587, username:myuser@fastmail.fm with plain auth.
======================================== ERROR ========================================
                                    UNEXPECTED ERROR
500 5.5.1 Invalid command


====================================== SOLUTION =======================================
This is not a common error. No recommended solution exists!

Please report the exact error message above to https://meta.discourse.org/
(And a solution, if you find one!)
=======================================================================================

Wenn ich mir tcpdump ansehe, sehe ich wieder, dass die Anmeldedaten AUTH PLAIN im Klartext ohne STARTTLS-Verschlüsselung gesendet werden.

Ich habe mir diese Seite angesehen, ja.

Basierend auf tcpdump scheint dies jedoch ein Fehler in den Diagnosewerkzeugen zu sein, da STARTTLS nicht verwendet wird, obwohl die Einstellung in app.yml aktiviert ist. (Die Discourse-Anwendung selbst verwendet STARTTLS. Ich gehe davon aus, dass viele E-Mail-Anbieter auch unverschlüsselte E-Mail-Übermittlung zulassen, sodass dieses Problem nur auftritt, wenn jemand die Diagnosewerkzeuge verwendet UND einen Anbieter verwendet, der keine unverschlüsselte Übermittlung über SMTP akzeptiert.)

1 „Gefällt mir“

Ah. Es sieht so aus, als ob diese Rake-Aufgabe dieselbe ist, die discourse-doctor aufruft. Entschuldigung dafür.

Vielleicht kann sich jemand ansehen, wie diese Rake-Aufgabe dem tatsächlichen Prozess ähnlicher gemacht werden kann, oder zumindest nicht aufgibt, wenn ihre Versuche, herauszufinden, was vor sich geht, unbeholfen sind. Ein guter erster Schritt wäre zu sagen: „Nun, XXX scheint kaputt zu sein, aber wir werden es trotzdem versuchen…“

1 „Gefällt mir“