Impossible d'envoyer des e-mails en utilisant le serveur SMTP local

J’ai testé le serveur SMTP avec Telnet :
Telnet s’est connecté au serveur SMTP.
Telnet m’a permis de m’authentifier sur le serveur SMTP.
Telnet m’a permis d’envoyer un e-mail avec succès en utilisant le serveur SMTP, et j’ai utilisé exactement les mêmes valeurs dans Telnet que celles présentes dans le fichier /var/discourse/containers/app.yaml.

Discourse doctor indique que Discourse s’est connecté avec succès au serveur SMTP.
Discourse doctor indique que Discourse n’a pas réussi à envoyer l’e-mail de test.

Par conséquent, Discourse présente des bugs qui l’empêchent d’envoyer des e-mails.

Je suggère que c’est plutôt votre configuration qui pose problème, et non des bogues dans Discourse. :wink:

2 « J'aime »

Utilisez-vous par hasard smtp-relay.gmail.com, peut-être depuis DigitalOcean ? Cela semble avoir cessé de fonctionner récemment, et personne n’est encore tout à fait certain de la raison.

Non. Parce que le serveur SMTP fonctionne parfaitement comme déjà décrit et que Discourse est correctement installé et renvoie correctement l’écran invitant à l’inscription de l’email d’administration. Cependant, cet email n’est pas envoyé.

Je utilise un serveur SMTP local situé sur la même machine que le conteneur Docker Discourse.

J’ai trouvé une erreur dans /var/discourse/shared/standalone/log/rails/production.log :

Rendu de layouts/email_template.html.erb
  Rendu de layouts/email_template.html.erb (Durée : 0,1 ms | Assignations : 32)
Courrier f915c15e-9c4d-4d4e-9527-81bc4984540c@forum.domain.com livré (63,7 ms)
Exception de tâche : le nom d'hôte "mail.forum.domain.com" ne correspond pas au certificat du serveur

Que signifie cette erreur ?

3 « J'aime »

Il semble que le message d’erreur ci-dessus fasse référence au certificat SSL du serveur.

Le certificat SSL sur le serveur est correct et possède le nom d’hôte approprié.

Il semble qu’il s’agisse d’un bug dans Discourse, où Discourse ne parvient pas à détecter correctement le certificat SSL du serveur.

Cela ne ressemble pas à un bug de Discourse. Cela ressemble plutôt à un problème de configuration du résolveur DNS de l’hôte ou du certificat SSL.

Puisque telnet n’utilise pas SSL, je suppose que c’est pourquoi vous avez constaté que cela fonctionnait. Sous Linux, vous pourriez constater que vous pouvez aller un peu plus loin en testant avec OpenSSL pour vérifier la connexion et examiner les certificats.

Vous trouverez ici des informations qui pourraient vous aider : https://docs.pingidentity.com/bundle/solution-guides/page/iqs1569423823079.html

Le HTTPS sur le site fonctionne car l’icône de cadenas vert s’affiche dans la barre d’adresse. Il n’y a aucun problème avec le certificat SSL du site. Le problème vient de la manière dont Discourse détecte le certificat SSL.

Cette erreur ne concerne pas le certificat du site, mais le certificat de votre service SMTP.

2 « J'aime »

Le certificat du service SMTP est simplement le certificat SSL du serveur, et non le certificat SSL du site web. Le certificat SSL du serveur est correct et fonctionne.

Pour configurer un serveur SMTP local sur la même machine que le conteneur Discourse, Discourse ne précise pas exactement quelles sont les valeurs correctes pour les paramètres SMTP dans app.yml. Cela entraîne une grande confusion et de nombreuses erreurs.

Dans les paramètres de app.yml, Discourse ne spécifie pas clairement ce que doit être DISCOURSE_SMTP_ADDRESS.

En réalité, il s’agit de sousdomaine.domaine.com, et non de mail.sousdomaine.domaine.com.

Valeurs correctes :
DISCOURSE_SMTP_ADDRESS: forum.domaine.com
DISCOURSE_SMTP_PORT: 587
DISCOURSE_SMTP_USER_NAME: postmaster@forum.domaine.com
DISCOURSE_SMTP_PASSWORD: "motdepasse"
DISCOURSE_SMTP_ENABLE_START_TLS: true           # (facultatif, valeur par défaut true)

Discourse ne précise pas clairement ce qu’est le « certificat serveur » dans le message d’erreur suivant, qui apparaît après l’échec de l’envoi du premier email d’inscription. Le message d’erreur se trouve dans :
/discourse/shared/standalone/log/rails/production.log
« Job exception: hostname “mail.forum.domaine.com” does not match the server certificate ».

Cependant, en réalité, le « certificat serveur » est tout simplement le certificat SSL du serveur.
De plus, dans le message d’erreur, Discourse mentionne à tort « hostname », alors que ce qui est réellement visé est en fait DISCOURSE_SMTP_ADDRESS.

Il y a eu des difficultés dues à l’ambiguïté de Discourse.

La solution a simplement consisté à définir le certificat SSL du serveur sur le bon certificat SSL.

Lorsque le problème a été signalé sur le forum Discourse, de nombreuses réponses étaient trompeuses et peu claires.

Discourse devrait corriger ces problèmes.

2 « J'aime »

Maintenant, Discourse Doctor indique que l’e-mail a été envoyé :

Envoi du courriel à admin@email.com. . .
Test de l'envoi vers admin@email.com en utilisant forum.domain.com:587.
Connexion au serveur SMTP réussie.
Envoi vers admin@email.com. . .
Courriel accepté par le serveur SMTP.

Cependant, aucun e-mail n’apparaît dans la boîte de réception ni dans les courriers indésirables.

Comment résoudre ce problème ?

Consultez les journaux de votre serveur SMTP local. Si Discourse l’a correctement transmis au serveur SMTP, il n’est plus sous la responsabilité de Discourse.

Dans les journaux Exim4, un message d’erreur apparaît. Que signifie-t-il ?

2021-01-21 00:39:39 H=(localhost.localdomain) [172.17.0.2] X=TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256 CV=no F=<noreply@forum.domain.com> A=dovecot_plain:postmaster@forum.domain.com rejected RCPT <admin@email.com> : Échec de la vérification de l'expéditeur