Discourse SMTP envoie "EHLO localhost" au lieu du domaine, ce qui casse le relais smtp de Google

@iwaffles -

Avez-vous essayé les étapes de résolution dans ce fil de discussion et dans les autres fils connexes ?

Ajoutez une ligne à votre app.yml :

DISCOURSE_SMTP_DOMAIN : [fqdn de votre serveur]

Ensuite, dans /var/discourse, exécutez ./launcher rebuild app.

discourse-doctor peut toujours signaler des échecs, mais les e-mails de test depuis la console d’administration devraient fonctionner, et le flux normal des e-mails devrait reprendre.

Si cela ne fonctionne pas, veuillez nous le signaler, car cela signifie qu’il existe un autre aspect qui n’a pas encore été découvert.

3 « J'aime »

J’ai essayé la reconstruction et cela fonctionne !

Tu as raison, discourse-doctor échoue toujours pour moi.

Je pense que j’avais redémarré Discourse auparavant au lieu de le reconstruire, ce qui explique probablement pourquoi le changement n’a pas été pris en compte. Merci @Syonyk !

2 « J'aime »

Il semble clair que localhost est toujours incorrect, mais que la plupart des serveurs SMTP ignorent cette valeur, ce qui n’a donc pas eu d’impact.

Les 3 endroits où smtp_domain apparaît dans https://github.com/discourse/discourse datent tous de plus de 2 à 7 ans. Je me demandais si une bibliothèque n’avait pas commencé à envoyer localhost pour une raison quelconque ?

Je pense que la meilleure solution, malgré les préoccupations de @Falco, serait de corriger cela quelque part comme

Indépendamment du fait que le consensus soit de continuer à envoyer localhost alors que cela ne respecte pas les RFC, la correction de la tâche rake décrite ci-dessus est nécessaire. Oh, et c’est moi qui ai écrit ce code. :man_shrugging: Mais, attendez. Je vois que action_mailer.smtp_settings['domain'] peut être vide. Donc je suppose que

    Net::SMTP.start(smtp[:address], smtp[:port], 'localhost', smtp[:user_name], smtp[:password], smtp[:authentication])

devrait devenir

     Net::SMTP.start(smtp[:address], smtp[:port], smtp[:domain] || 'localhost', smtp[:user_name], smtp[:password], smtp[:authentication])

pour l’instant, du moins. Je pense qu’il faudrait utiliser le domain s’il existe, et conserver le comportement actuel (mais erroné ?) consistant à utiliser localhost si discourse_smtp_host n’est pas défini.

Je suis réticent à ajouter cela à discourse-setup, car cela fonctionne pour presque tout le monde tel quel, et ce serait une question de plus, plutôt confuse. (Et je suis sur le point d’ajouter une question pour notification_email, donc si nous ne faisons pas attention, cela risque de commencer à ressembler à ce dont je me souviens de la création du noyau Linux il y a quelques décennies.)

Peut-être que c’est là que vient le localhost ?

2 « J'aime »

Je viens d’être alerté sur ce problème et je peux confirmer que la correction fonctionne. Notre instance, habituellement à faible volume, a également explosé côté Sidekiq, apparemment à cause de tâches de hachage qui ont été réessayées de nombreuses fois.

Je pensais que Google avait mis en place de nouvelles limites d’utilisation, car le message d’erreur affiché correspond à celui qu’ils renvoient pour les rejets de type DoS.

2 « J'aime »

Merci pour le rapport ! J’ajouterai bientôt une correction pour cela à la configuration de Discourse.

2 « J'aime »

Voici ce qui est désormais en place :

  • Ajouté en tant que configuration d’environnement d’exemple dans tous les fichiers d’exemple

  • Demandé lors de la configuration d’une nouvelle installation de Discourse

  • Corrigé dans discourse doctor et la tâche rake

Merci à tous :tada:

5 « J'aime »