Après l'installation, Curl peut envoyer des e-mails, mais Discourse ne le peut pas. Aidez à corriger ?

Salut !

Dans le texte ci-dessous, remplacez <DOT> par . - car je suis un nouvel utilisateur et Discourse ne me permet pas de poster des liens.

J’ai installé Discourse sur un serveur cloud Hetzner nouvellement créé, et l’URL s’y résout correctement : forum<DOT>thewizardofosc<DOT>com

Cependant, l’email avec lequel je me suis inscrit n’est jamais envoyé. Dans le fichier journal, le message de Discourse est Net::ReadTimeout, si cela signifie quelque chose.

telnet se connecte - taper "telnet mail<DOT>thewizardofosc<DOT>com 465" donne "Connecté à thewizardofosc<DOT>com".

De plus, Curl envoie un email avec succès !

En tapant ce qui suit :
curl --ssl smtps://mail<DOT>thewizardofosc<DOT>com --mail-from discourse@thewizardofosc<DOT>com --mail-rcpt <VARIOUS_WORKED> --upload-file email.txt --user 'discourse@thewizardofosc<DOT>com:<PASSWORD>'

L’envoi se fait avec succès.

Mais alors pourquoi Discourse ne fonctionne-t-il pas ?

Voici ce que je suppose être les sections pertinentes de mon fichier d’application :

## lors de l'inscription initiale, exemple 'user1@example.com,user2@example.com'
DISCOURSE_DEVELOPER_EMAILS: 'iliasb@thewizardofosc<DOT>com'

## TODO : Le serveur SMTP utilisé pour valider les nouveaux comptes et envoyer des notifications
# L'adresse SMTP, le nom d'utilisateur et le mot de passe sont requis
# ATTENTION : le caractère '#' dans le mot de passe SMTP peut causer des problèmes !
DISCOURSE_SMTP_ADDRESS: mail<DOT>thewizardofosc<DOT>com
DISCOURSE_SMTP_PORT: 465
DISCOURSE_SMTP_USER_NAME: discourse@thewizardofosc<DOT>com
DISCOURSE_SMTP_PASSWORD: <PASSWORD>
#DISCOURSE_SMTP_ENABLE_START_TLS: true           # (optionnel, valeur par défaut true)

## Si vous avez ajouté le modèle Lets Encrypt, décommentez ci-dessous pour obtenir un certificat SSL gratuit
LETSENCRYPT_ACCOUNT_EMAIL: me@example<DOT>com

Il faudrait consulter le journal des erreurs pour voir ce qui se passe avec votre configuration de messagerie.

J’ai suivi les étapes indiquées ici : Troubleshoot email on a new Discourse install - #2

Sans grand succès. L’exécution de discourse-doctor me donne la même sortie : Net::ReadTimeout,
que je vois également dans shared/standalone/log/rails/production.log

Salut !

Parlez-vous du fichier shared/standalone/log/rails/production.log ?

Voici ce que j’obtiens :

Courrier livré 5208d56b-b84b-4de6-a13e-76b60179af46@forum.thewizardofosc.com (60142,6 ms)
Exception de tâche : Net::ReadTimeout

Étrange. Si vous pouvez vous connecter depuis l’extérieur du conteneur, vérifiez si la commande curl fonctionne à l’intérieur du conteneur. Mon seul soupçon est que vous rencontrez un problème de réseau avec Docker.

Jay a raison.

La prochaine étape logique, @onar3d, est d’essayer votre test curl depuis l’intérieur du conteneur.

Je viens de vérifier pour vous : curl est déjà installé dans le conteneur, donc au moins, vous n’avez pas besoin de l’installer.

docker exec -it app bash
root@hostname-app/# curl --version
curl 7.64.0 (x86_64-pc-linux-gnu) libcurl/7.64.0 OpenSSL/1.1.1d zlib/1.2.11 libidn2/2.0.5 libpsl/0.20.2 (+libidn2/2.0.5) libssh2/1.8.0 nghttp2/1.36.0 librtmp/2.3
Release-Date: 2019-02-06
Protocols: dict file ftp ftps gopher http https imap imaps ldap ldaps pop3 pop3s rtmp rtsp scp sftp smb smbs smtp smtps telnet tftp 
Features: AsynchDNS IDN IPv6 Largefile GSS-API Kerberos SPNEGO NTLM NTLM_WB SSL libz TLS-SRP HTTP2 UnixSockets HTTPS-proxy PSL 

J’espère que cela vous aide.

Intéressante suggestion !

Mais j’ai accédé à Docker avec « docker exec -it DOCKERID bash » et j’ai utilisé la même commande curl, ce qui a aussi fonctionné.

Merci, je viens de l’essayer et cela a parfaitement fonctionné !

Donc, ce ne peut pas être Docker qui est bloqué…

Bonjour @onar3d,

C’est une tentative hasardeuse, mais puisque vous utilisez le port 465 plutôt que le port 587, vous pourriez essayer ceci dans votre fichier yml de conteneur :

DISCOURSE_SMTP_ENABLE_START_TLS: false

Puis reconstruisez le conteneur et voyez si vous avez de la chance :slight_smile:

Référence :

GMail (par exemple, pour comparer) expose les ports et méthodes d’authentification suivants.

  • TLS/STARTTLS (parfois appelé TLS explicite) : utilise le port 587
  • SSL (parfois appelé TLS implicite) : utilise le port 465

… on tente notre chance sur celui-ci… :slight_smile: mais peut-être que nous aurons de la chance

Si cela ne fonctionne pas, vous pourrez toujours revenir en arrière.

1 « J'aime »

Merci !

J’ai essayé cela à l’instant, mais l’e-mail n’a pas été envoyé par Discourse :confused:

Oui, c’était un coup de poker… désolé d’avoir perdu ton temps avec ça !

Ma seule autre « idée folle » pour le moment est de voir si tu peux accéder à ton serveur de messagerie (quel qu’il soit) et définir le port sur 587 (de nombreux fournisseurs SMTP te proposent un choix) et « rejouer le jeu » avec DISCOURSE_SMTP_ENABLE_START_TLS: true, bien sûr.

Franchement, je ne suis normalement pas un « joueur de dés » et je suis plutôt guidé par les faits ; donc si tu ne veux pas essayer, je comprends tout à fait, @onar3d !!

Merci ! Je n’ai malheureusement pas la possibilité de modifier cela, c’est l’un de ces services « clé en main » configurés par mon fournisseur.

Bonjour @onar3d

C’est noté. Je n’ai plus d’idées folles pour le moment et il est temps que je me repose pour la nuit ; bonne chance et espérons qu’un des membres de l’équipe aura de meilleures idées à essayer.

Meilleures salutations.

Après quelques tentatives supplémentaires (merci beaucoup @IAmGav !), ma configuration Discourse a été confirmée comme fonctionnelle avec un autre serveur de messagerie, ce qui élimine plusieurs pistes à explorer.

Mon fournisseur de serveur de messagerie m’a fait parvenir un message d’erreur de leur part ainsi qu’une suggestion :

L’ingénieur a examiné les journaux et l’erreur observée depuis leur adresse IP concerne les paramètres SSL. Ils utilisent probablement une ancienne version ou des paramètres de connexion obsolètes.

Preuve :
Erreur TLS lors de la connexion depuis [95.216.139.49]:33568 SSL_accept : la connexion TCP a été fermée par le pair.

Essayez avec le mode SSL désactivé pour voir si cela fonctionne.

J’ai essayé en définissant DISCOURSE_SMTP_ENABLE_START_TLS à false comme indiqué ci-dessus, sur le port 465 ainsi que sur le port 26 (répertorié par mon fournisseur comme le port pour les connexions non SSL), mais rien n’a fonctionné.

Est-ce parce que je n’ai pas acheté de certificat SSL pour le domaine thewizardofosc.com ? Je m’en rends compte maintenant après avoir un peu davantage fait des recherches.

Si cela ne fonctionne pas avec l’option sans SSL, cela ne fonctionnera pas non plus avec un SSL payant. Votre hébergeur de messagerie devrait vous fournir un SSL gratuit Let’s Encrypt.

Cher @onar3d,

Vous pourriez envisager d’exécuter vos tests curl avec l’option verbose -v activée, pour pouvoir analyser pleinement la poignée de main réussie, puis remonter à partir de cette analyse.

Vous pouvez utiliser cette option verbose pour comprendre comment cela fonctionne :slight_smile:

Cela devrait vous aider.