Configuración SMTP no funciona con smtp-relay de GMail

No puedo configurar el SMTP con Discourse y el SMTP de GMail

Habilité el Relay SMTP en la configuración de Google, permití el envío desde mi dominio (sin whitelist de IPs), usando autenticación SMTP + cifrado.

Discourse está alojado en 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

Tuve un error genérico Job exception: end of file reached. Cuando añadí las variables de entorno NOTIFICATION_EMAIL y SMTP_DOMAIN, ahora veo:

503 5.5.1 bad sequence of commands x20sm63393lfr.126 - gsmtp

al ejecutar doctor y tratar de enviar un correo a mí mismo.

Cambié DISCOURSE_SMTP_DOMAIN para que coincida con forum.mydomain.io y todavía tengo el mismo error.

¿Cómo se supone que debo depurar esto más allá de cambiar variables de entorno, reconstruir y esperar a que funcione?

Gracias de antemano.

En lugar de reconstruir, puedes ejecutar:

./launcher destroy app 
./launcher start app 

Hay varios temas sobre cómo hacer que funcione lo de Google. Es posible, pero no es fácil. Y probablemente cambie cada mes. :wink:

3 Me gusta

Aunque creo que el error de @kvsf ya está solucionado o que se han cambiado algunas cosas fundamentales en tu configuración, me gustaría continuar este hilo publicando mi propia configuración, mi enfoque adicional y mi búsqueda de ayuda dentro del mismo dominio de problemas.

Configuración Básica

  • Google Workspace Business Starter
  • Configurar Gmail-Routing > SMTP-Relay con i) solo usuarios registrados dentro del dominio, ii) lista blanca de IP con la IP de mi servidor de alojamiento de foros y forzar autenticación SMTP, iii) forzar TLS
  • Instalación de discourse docker según la documentación de discourse
  • Configuración de app.yml según
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

Mis Pruebas

Al ejecutar ./discourse-doctor, esta configuración genera el error

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

Primero revisé los diferentes registros de discourse y de correo electrónico
Probando manualmente el mismo proceso desde dentro de docker (conectando usando docker exec -it <CONTAINER_ID> bash) a través de

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

no presenta problemas y funciona bien. Así que creo que o mi configuración de parámetros en app.yml es extraña O discourse internamente tiene alguna mala comunicación de scripts O … tantas posibilidades. ^^
Para no tener que ejecutar siempre ./launcher rebuild app después de cambiar app.yml para probar diferentes configuraciones, comencé a editar directamente /var/www/discourse/vendor/bundle/ruby/3.2.0/gems/mail-2.8.1/lib/mail/network/delivery_methods/smtp.rb cambiando el código existente a:

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

lo que lleva al mismo comportamiento que el anterior (dadas las configuraciones personalizadas de app.yml).

Búsqueda de ayuda

Y ahora estoy atascado. Por supuesto, podría jugar más con las configuraciones restantes (e incluso podría volver a usar SSL solamente, aunque esto está obsoleto por discourse), pero me gustaría:

  1. aprender cómo analizar este problema más profunda y extensamente
  2. comprender así qué está pasando realmente y cuál es el problema
  3. solucionarlo y poder usar todo sin problemas (+ finalmente poner en marcha el foro correctamente)

Gracias de antemano por tu ayuda.

push*
¿Alguna idea/sugerencia?

¿Se ha resuelto esto? Estoy buscando hacer exactamente esto y encontré esta publicación que me está poniendo nervioso.

No estoy seguro con respecto a Gmail, pero Zoho no funciona y Outlook dejó de funcionar en un sitio de comercio electrónico del que yo era parte de la administración.

Desde hace tiempo, la mejor práctica ha sido utilizar un servicio de correo electrónico transaccional como Mailersend, pero se está convirtiendo cada vez más en un requisito a medida que pasa el tiempo.

Edición para aclarar: es un bloqueo por parte del proveedor de correo electrónico y no algo que se pueda solucionar en Discourse o en el lado del servidor. La mayoría de los proveedores ya no admiten, si es que alguna vez lo hicieron oficialmente, el uso de SMTP para enviar correos electrónicos transaccionales.

2 Me gusta