Configuration SMTP ne fonctionne pas avec smtp-relay de GMail

Je ne parviens pas à configurer SMTP avec Discourse et le SMTP de GMail

J’ai activé le relais SMTP dans les paramètres de Google, autorisé l’envoi depuis mon domaine (sans mise en liste blanche d’adresses IP), en utilisant l’authentification SMTP et le chiffrement.

Discourse est hébergé sur forum.example.com

DISCOURSE_SMTP_ADDRESS: smtp-relay.gmail.com
DISCOURSE_SMTP_PORT: 587
DISCOURSE_SMTP_USER_NAME: noreply@example.com
DISCOURSE_SMTP_PASSWORD: password
DISCOURSE_SMTP_AUTHENTICATION: login
DISCOURSE_SMTP_DOMAIN: mydomain.io
DISCOURSE_NOTIFICATION_EMAIL: noreply@example.com
DISCOURSE_SMTP_ENABLE_START_TLS: true

J’ai eu une erreur générique Job exception: end of file reached. Lorsque j’ai ajouté les variables d’environnement NOTIFICATION_EMAIL et SMTP_DOMAIN, j’observe maintenant :

503 5.5.1 bad sequence of commands x20sm63393lfr.126 - gsmtp

lors de l’exécution de doctor et de la tentative d’envoi d’un e-mail vers moi-même.

J’ai modifié DISCOURSE_SMTP_DOMAIN pour qu’il corresponde à forum.mydomain.io, mais l’erreur persiste.

Comment devrais-je procéder pour déboguer cela davantage, autre qu’en modifiant les variables d’environnement, en reconstruisant et en espérant que cela fonctionne ?

Merci d’avance.

Au lieu de reconstruire, vous pouvez exécuter :

./launcher destroy app 
./launcher start app 

Il existe plusieurs sujets sur la configuration de Google Whatever. C’est possible, mais pas facile. Et cela change probablement tous les mois. :wink:

3 « J'aime »

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.

push*
Des idées/suggestions ?

Ceci a-t-il été résolu ? Je cherche à faire exactement la même chose et j’ai trouvé ce message qui m’inquiète.

Je ne suis pas sûr en ce qui concerne Gmail, mais Zoho ne fonctionne pas et Outlook a cessé de fonctionner sur un site de commerce électronique dont je faisais partie de l’administration.

Il est recommandé depuis un certain temps d’utiliser un service de messagerie transactionnelle tel que Mailersend, mais cela devient de plus en plus une exigence avec le temps.

Modification pour clarifier : il s’agit d’un blocage du côté du fournisseur de messagerie et non de quelque chose qui peut être corrigé côté Discourse ou côté serveur. La plupart des fournisseurs ne prennent plus en charge, s’ils l’ont jamais officiellement fait, l’utilisation de SMTP pour envoyer des e-mails transactionnels.

2 « J'aime »