Erreur SMTP : il faut d'abord émettre une commande STARTTLS

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 « J'aime »

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 « J'aime »

Did you get this working?

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

1 « J'aime »

Je rencontre un problème similaire. Hier, j’ai passé environ trois heures à déboguer l’envoi d’e-mails sur une nouvelle instance Discourse, sans succès. J’essaie d’envoyer des e-mails via Fastmail avec STARTTLS sur le port 587. D’autres services fonctionnent avec les mêmes identifiants.

Je n’obtiens pas l’erreur « Must issue a STARTTLS command first » avec ces paramètres :

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

…suivi d’un ./launcher rebuild app, lorsque j’exécute ./discourse-doctor et que j’envoie un e-mail, je reçois une erreur 500 5.5.1 Invalid command en réponse.

Aujourd’hui, j’ai commencé à tracer la communication avec tcpdump, et j’ai remarqué que Discourse ne semble pas utiliser STARTTLS. Voici ce qui se passe lorsque j’envoie un e-mail de récupération Grafana :

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

Mais avec Discourse, voici ce qui se passe :

< 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

Il semble donc que Discourse envoie mes identifiants en clair sur Internet, même si STARTTLS est activé dans les paramètres ? Est-ce un bug ?

J’ai également remarqué que lorsque j’exécute ./discourse-doctor, le résumé « YML SETTINGS » en haut affiche les éléments suivants :

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

Cependant, il n’y a aucune mention de DISCOURSE_SMTP_ENABLE_START_TLS, même s’il est défini dans app.yml. Je ne suis pas sûr si ce problème est lié.

2 « J'aime »

Oh, c’est bizarre. J’ai créé un compte utilisateur manuellement (via rake admin:create) puis je me suis connecté, et soudain les notifications par e-mail ont fonctionné. Cependant, l’envoi via discourse-doctor échoue toujours.

Peut-être que discourse-doctor est cassé ?

1 « J'aime »

Désolé. Je sais à quel point cela peut être frustrant.

C’est possible. Il fait certaines choses pour essayer de déboguer ce qui pose problème, donc il se peut que la logique qu’il utilise soit défectueuse dans votre cas.

Il existe également une tâche rake qui aurait probablement été un meilleur choix pour vous.

    rake emails:test[x@y.com]

Suiviez-vous Dépannage des e-mails sur une nouvelle installation de Discourse ?

2 « J'aime »

Je n’étais pas au courant de cette commande, elle semble en effet utile ! Le résultat est cependant le même :

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!)
=======================================================================================

Quand je regarde tcpdump, je peux à nouveau voir qu’il envoie les identifiants AUTH PLAIN en texte brut sans chiffrement STARTTLS.

J’ai regardé cette page, oui.

Cependant, d’après tcpdump, cela ressemble à un bug dans les outils de diagnostic car STARTTLS n’est pas utilisé même si le paramètre est activé dans app.yml. (L’application Discourse elle-même utilise STARTTLS. Je suppose que de nombreux fournisseurs de messagerie autoriseront également la soumission d’e-mails non chiffrés, donc ce problème ne se présentera que si quelqu’un utilise les outils de diagnostic ET utilise un fournisseur qui n’accepte pas la soumission non chiffrée via SMTP.)

1 « J'aime »

Ah. Il semble que cette tâche rake soit la même que celle appelée par discourse-doctor. Désolé pour ça.

Peut-être que quelqu’un pourrait regarder comment rendre cette tâche rake plus similaire au processus réel, ou du moins ne pas abandonner si ses tentatives pour comprendre ce qui se passe sont maladroites. Une bonne première étape serait de dire « Eh bien, XXX semble cassé, mais nous allons quand même essayer… »

1 « J'aime »