Configuration SMTP ne fonctionne pas avec smtp-relay de GMail

Bien que je pense que l’erreur de @kvsf soit déjà corrigie ou que des éléments fondamentaux de votre configuration aient été modifiés, j’aimerais poursuivre cette discussion en publiant ma propre configuration, mon approche supplémentaire et ma demande d’aide dans le même domaine problématique.

Configuration de base

  • Google Workspace Business Starter
  • Configuration du routage Gmail > Relais SMTP avec i) uniquement les utilisateurs enregistrés du domaine, ii) liste blanche d’adresses IP avec l’IP de mon serveur d’hébergement de forum et authentification SMTP forcée, iii) TLS forcé
  • Installation de Discourse Docker conformément à la documentation de Discourse
  • Configuration de app.yml selon
expose:
  - "80:80"   # http
  - "443:443" # https

env:
  DISCOURSE_HOSTNAME: "forum.mydomain.com"
  DISCOURSE_DEVELOPER_EMAILS: 'dev@mydomain.com'

  DISCOURSE_SMTP_ADDRESS: "smtp-relay.gmail.com"
  DISCOURSE_SMTP_PORT: 587
  DISCOURSE_SMTP_USER_NAME: "user@mydomain.com"
  DISCOURSE_SMTP_PASSWORD: "mypass"
  DISCOURSE_SMTP_ENABLE_START_TLS: true
  DISCOURSE_SMTP_AUTHENTICATION: login
  DISCOURSE_SMTP_OPEN_TIMEOUT: 25
  DISCOURSE_SMTP_READ_TIMEOUT: 25
  DISCOURSE_SMTP_DOMAIN: "mydomain.com"
  DISCOURSE_NOTIFICATION_EMAIL: "noreply@mydomain.com"
  LETSENCRYPT_ACCOUNT_EMAIL: dev@mydomain.com

Mes tests

Lors de l’exécution de ./discourse-doctor, cette configuration entraîne l’erreur :

Testing sending to ...
SMTP server connection successful.
Sending to artificial.testadress@gmail.com. . .
Sending mail failed.
end of file reached

J’ai ensuite vérifié les différents journaux de Discourse et d’e-mail
En testant manuellement le même processus depuis Docker (en me connectant avec docker exec -it <CONTAINER_ID> bash) via

openssl s_client -starttls smtp -crlf -connect smtp.gmail.com:587

cela ne rencontre aucun problème et fonctionne bien. Je pense donc que soit ma configuration de paramètres dans app.yml est étrange, soit Discourse a une mauvaise communication interne de script, soit… tant de possibilités. ^^
Pour ne pas avoir à exécuter ./launcher rebuild app à chaque fois après avoir modifié app.yml pour tester différents paramètres, j’ai commencé à modifier directement /var/www/discourse/vendor/bundle/ruby/3.2.0/gems/mail-2.8.1/lib/mail/network/delivery_methods/smtp.rb en modifiant le code existant pour :

class SMTP
  attr_accessor :settings

  DEFAULTS = {
    :address              => 'smtp-relay.gmail.com',
    :port                 => 587,
    :domain               => 'mydomain.com',
    :user_name            => 'user@mydomain.com',
    :password             => 'mypass',
    :authentication       => 'login',
    :enable_starttls      => nil,
    :enable_starttls_auto => true,
    :openssl_verify_mode  => 'peer',
    :ssl                  => nil,
    :tls                  => nil,
    :open_timeout         => 25,
    :read_timeout         => 25
  }

  def initialize(values)
    self.settings = DEFAULTS #.merge(values)
  end

ce qui conduit au même comportement que ci-dessus (étant donné les paramètres personnalisés de app.yml).

Recherche d’aide

Et maintenant, je suis bloqué. Bien sûr, je pourrais jouer davantage avec les paramètres restants (et même revenir à l’utilisation de SSL uniquement, bien que cela soit déprécié par Discourse), mais j’aimerais :

  1. apprendre comment analyser ce problème plus en profondeur
  2. comprendre ainsi ce qui se passe réellement et quel est le problème
  3. le résoudre et pouvoir tout utiliser de manière fluide (+ enfin faire fonctionner le forum correctement)

Merci d’avance pour votre aide.