Error SMTP: primero se debe emitir un comando STARTTLS

Estoy intentando configurar Discourse 2.7.0.beta4 con el servicio SMTP de MailerSend.

Después de ejecutar ./discourse-doctor, obtuve el siguiente error:

SMTP error: Must issue a STARTTLS command first

Esta es mi configuración actual en app.yml relacionada con SMTP:

  DISCOURSE_SMTP_ADDRESS: 'smtp.mailersend.net'
  DISCOURSE_SMTP_PORT: 587
  DISCOURSE_SMTP_USER_NAME: username@subdomain.domain.org
  DISCOURSE_SMTP_PASSWORD: mypasswordhere
 #DISCOURSE_SMTP_ENABLE_START_TLS: true           # (opcional, valor por defecto true)
 #DISCOURSE_SMTP_AUTHENTICATION: login
 #DISCOURSE_SMTP_OPENSSL_VERIFY_MODE: none

Ya intenté descomentar y establecer DISCOURSE_SMTP_ENABLE_START_TLS explícitamente en true, pero el error persiste. Lo mismo ocurrió con DISCOURSE_SMTP_AUTHENTICATION: login.

Después de cualquier cambio en el archivo YML, reinicio el sistema con este comando:

./launcher destroy app; ./launcher start app

¿Tienen alguna sugerencia sobre qué podría estar ocurriendo?

¡Gracias de antemano!

Recientemente hice algunos cambios en discourse-setup y también un cambio en la tarea rake que estás usando (que creo que aún no se ha fusionado).

Si quieres darme acceso a tu servidor, lo revisaré.

2 Me gusta

Como mencioné por mensaje privado, no puedo otorgar acceso al servidor debido a preocupaciones de seguridad. Pero muchas gracias a @pfaffman por su ayuda y por intentar resolver este problema.

Permítanme agregar más contexto a este asunto: un administrador anterior instaló Discourse con el servicio SMTP de Mailgun, pero dejó de funcionar y no tengo acceso a esa cuenta.

Como dije, estoy intentando configurarlo ahora con Mailersend. He leído este tema [1] y otros sobre STARTTLS aquí en el foro, pero no estoy seguro de cómo implementar los cambios necesarios.

También probé la siguiente configuración, pero el error persiste:

DISCOURSE_SMTP_OPENSSL_VERIFY_MODE: none

¿Si esto está relacionado con alguna actualización reciente, sería mejor considerar una reversión?

[1] Can't send email with certificate issue - #3 by supermathie

1 me gusta

¿Lo lograste?

No, he decidido cambiar a otro servicio de correo. Ahora funciona perfectamente con Mailjet.

1 me gusta

Estoy experimentando un problema similar. Ayer depuré el envío de correos electrónicos en una nueva instancia de Discourse durante unas tres horas, sin éxito. Estoy intentando enviar correos electrónicos a través de Fastmail con STARTTLS en el puerto 587. Otros servicios funcionan con las mismas credenciales.

No obtengo la respuesta de error “Must issue a STARTTLS command first” con estas configuraciones:

DISCOURSE_SMTP_ADDRESS: 'smtp.fastmail.com'
DISCOURSE_SMTP_PORT: 587
DISCOURSE_SMTP_USER_NAME: 'myuser@fastmail.fm'
DISCOURSE_SMTP_PASSWORD: 'mypass'
DISCOURSE_SMTP_ENABLE_START_TLS: true

…seguido de un ./launcher rebuild app, cuando ejecuto ./discourse-doctor y envío un correo electrónico, obtengo un error 500 5.5.1 Invalid command en respuesta.

Hoy comencé a rastrear la comunicación con tcpdump y noté que Discourse en realidad no parece usar STARTTLS. Esto es lo que sucede cuando envío un correo electrónico de recuperación de Grafana:

< 220 smtp.fastmail.com ESMTP ready
> EHLO 9b5ba1569f77
< 250-smtp.fastmail.com
< 250-PIPELINING
< 250-SIZE 71000000
< 250-ENHANCEDSTATUSCODES
< 250-8BITMIME
< 250 STARTTLS
> STARTTLS
< ...[encrypted]

Pero con Discourse, esto sucede:

< 220 smtp.fastmail.com ESMTP ready
> EHLO localhost
< 250-smtp.fastmail.com
< 250-PIPELINING
< 250-SIZE 71000000
< 250-ENHANCEDSTATUSCODES
< 250-8BITMIME
< 250 STARTTLS
> AUTH PLAIN [redacted]
< 500 5.5.1 Invalid command

Entonces, ¿parece que Discourse está enviando mis credenciales a través de Internet en texto plano, a pesar de que STARTTLS está habilitado en la configuración? ¿Es esto un error?

También noté que cuando ejecuto ./discourse-doctor, el resumen “YML SETTINGS” en la parte superior enumera los siguientes elementos:

==================== YML SETTINGS ====================
DISCOURSE_HOSTNAME=forum.[redacted]
SMTP_ADDRESS=smtp.fastmail.com
DEVELOPER_EMAILS=sysadmin@[redacted]
SMTP_PASSWORD=[redacted]
SMTP_PORT=587
SMTP_USER_NAME=[redacted]@fastmail.fm
LETSENCRYPT_ACCOUNT_EMAIL=

Sin embargo, no hay mención de DISCOURSE_SMTP_ENABLE_START_TLS, a pesar de que está configurado en app.yml. No estoy seguro de si este problema está relacionado.

2 Me gusta

Qué raro. Creé una cuenta de usuario manualmente (a través de rake admin:create) y luego inicié sesión, y de repente las notificaciones por correo electrónico funcionaron. Sin embargo, el envío a través de discourse-doctor sigue fallando.

¿Quizás discourse-doctor está roto?

1 me gusta

Lo siento. Sé lo frustrante que puede ser eso.

Es posible. Hace algunas cosas para intentar depurar cuál es el problema, por lo que puede ser que la lógica que está utilizando esté rota para tu caso.

También hay una tarea de rake que probablemente habría sido una mejor opción para ti.

    rake emails:test[x@y.com]

¿Seguiste Solución de problemas de correo electrónico en una nueva instalación de Discourse?

2 Me gusta

No estaba al tanto de ese comando, ¡parece útil de hecho! El resultado es el mismo, sin embargo:

root@app:/var/www/discourse# rake emails:test redacted@example.com
Testing sending to  using smtp.fastmail.com:587, username:myuser@fastmail.fm with plain auth.
======================================== ERROR ========================================
                                    UNEXPECTED ERROR
500 5.5.1 Invalid command

====================================== SOLUTION =======================================
This is not a common error. No recommended solution exists!
Please report the exact error message above to https://meta.discourse.org/
(And a solution, if you find one!)
=======================================================================================

Cuando miro tcpdump, de nuevo puedo ver que está enviando las credenciales AUTH PLAIN en texto plano sin cifrado STARTTLS.

Sí, revisé esa página.

Sin embargo, basándome en tcpdump, esto me parece un error en las herramientas de diagnóstico porque STARTTLS no se está utilizando a pesar de que la configuración está habilitada en app.yml. (La aplicación Discourse en sí misma usa STARTTLS. Supongo que muchos proveedores de correo electrónico también permitirán la envío de correo no cifrado, por lo que este problema solo surgirá si alguien usa las herramientas de diagnóstico y usa un proveedor que no acepta envíos no cifrados a través de SMTP).

1 me gusta

Ah. Parece que esa tarea de rake es la misma que llama discourse-doctor. Lo siento.

Quizás alguien pueda ver cómo hacer que esa tarea de rake sea más parecida al proceso real, o al menos no rendirse si sus intentos de averiguar qué está pasando son torpes. Un buen primer paso sería decir: “Bueno, XXX parece roto, pero lo intentaremos de todos modos…”.

1 me gusta