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

Je tente de configurer Discourse 2.7.0.beta4 avec le service SMTP MailerSend.

Après avoir exécuté ./discourse-doctor, j’ai obtenu l’erreur suivante.

Erreur SMTP : Une commande STARTTLS doit d’abord être émise

Voici ma configuration actuelle dans app.yml concernant 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           # (optionnel, valeur par défaut true)
 #DISCOURSE_SMTP_AUTHENTICATION: login
 #DISCOURSE_SMTP_OPENSSL_VERIFY_MODE: none

J’ai déjà essayé de décommenter et de définir DISCOURSE_SMTP_ENABLE_START_TLS explicitement sur true, mais l’erreur persiste. Il en va de même pour DISCOURSE_SMTP_AUTHENTICATION: login.

Après toute modification du fichier YML, je redémarre le système avec cette commande :

./launcher destroy app; ./launcher start app

Avez-vous une idée de ce qui se passe ?

Merci d’avance !

J’ai apporté quelques modifications à discourse-setup récemment, ainsi qu’une modification à la tâche rake que vous utilisez (je pense qu’elle n’est pas encore fusionnée).

Si vous souhaitez me donner accès à votre serveur, je jeterai un coup d’œil.

2 « J'aime »

Comme je l’ai mentionné par MP, je ne peux pas donner accès au serveur en raison de préoccupations de sécurité. Mais merci beaucoup à @pfaffman pour votre aide et pour avoir essayé de résoudre ce problème.

Permettez-moi d’ajouter plus de contexte à ce problème : un administrateur précédent a installé Discourse avec le service SMTP Mailgun, mais cela a cessé de fonctionner et je n’ai pas accès à ce compte.

Comme je l’ai dit, j’essaie de le configurer maintenant avec Mailersend. J’ai lu ce sujet [1] et d’autres concernant STARTTLS ici sur le forum, mais je ne suis pas sûr de savoir comment mettre en œuvre les modifications nécessaires.

J’ai également essayé ce paramètre ci-dessous, mais l’erreur persiste :

DISCOURSE_SMTP_OPENSSL_VERIFY_MODE: none

Si cela est lié à une mise à jour récente, ne serait-il pas préférable d’envisager un retour à une version antérieure ?

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

1 « J'aime »

Est-ce que tu as réussi à le faire fonctionner ?

Non, j’ai décidé de passer à un autre service de messagerie. Tout fonctionne bien maintenant avec 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 »