No se puede enviar correo electrónico - problema con el puerto 465

Me gustaría cambiar el proveedor SMTP, pero no parece funcionar aunque estoy seguro de que el servidor puede enviar correos electrónicos.

Tengo esto en app.yml:

  DISCOURSE_SMTP_ADDRESS: <<SMTP SERVER>>
  DISCOURSE_SMTP_PORT: 465
  DISCOURSE_SMTP_USER_NAME: <<USER>>
  DISCOURSE_SMTP_PASSWORD: <<PASSWORD>>

Usando telnet <<SMTP SERVER>> 465 se conecta correctamente, pero cuando intento enviar correos electrónicos, Discourse responde con:

ERROR - Net::ReadTimeout with #<Socket:(closed)>

¿Alguien tiene alguna indicación de lo que necesito configurar?

Revisé el servidor basándome en este tema: Troubleshoot email on a new Discourse install

Parece que se conecta al servidor y envía un correo electrónico de prueba correctamente si lo hago manualmente:

> sudo ./launcher enter app
root@support-app:/var/www/discourse# openssl s_client -connect mail.xxxxxxxx.com:465
  :
  :
  enorme cantidad de basura
  :
  :
220 xxxxxxx.com Anti-spam GT for Coremail System (mispb-6da2110f-64b0-4d67-acf1-2d302bd594f9-xxxxxxx.com[20220915])
EHLO mail.xxxxxxxxx.com
250-mail
250-PIPELINING
250-AUTH LOGIN PLAIN
250-AUTH=LOGIN PLAIN
250-coremail 1Uxr2xKj7kG0xkI17xGrUDI0s8FY2U3Uj8Cz28x1UUUUU7Ic2I0Y2UrpDiNKUCa0xDrUUUUj
250-STARTTLS
250-SMTPUTF8
250 8BITMIME
AUTH PLAIN xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
235 Authentication successful
mail from: <xxx@xxxxxx.com>
250 Mail OK
rcpt to: <xxxx@xxxxxxx.com>
250 Mail OK
data
354 End data with <CR><LF>
content

.
250 Mail OK queued as AQAAfwBXr9nSGHdj3hEgAA--.7073S2

¿Cuánto tiempo tarda en aparecer la salida?

Casi inmediatamente después de enviar un comando.

EDITAR: ¿Hay alguna forma de obtener un registro más detallado para descubrir qué paso está causando el error?

Es probable que el proveedor de alojamiento esté bloqueando el puerto de salida. Si utilizas algún servicio como Mailgun (o casi cualquier otro), el puerto 2525 debería funcionar. Si se trata de un servidor de correo que administras, puedes hacer que escuche en otro puerto (como el 2525).

O (probablemente lo más difícil) puedes abrir un ticket con quien aloja tu servidor y pedirle que abra el puerto.

Bueno, considerando que puedo ./launcher enter app y luego openssl conectarme al servidor de correo, iniciar sesión vía SMTP y enviar un correo electrónico con éxito desde dentro del contenedor de Discourse, dudo que sea el puerto el que no funcione…

2 Me gusta

Rastreé el código y parece que EHLO ni siquiera se alcanzó. El servidor SMTP está conectado, pero parece faltar el handshake SSL, por lo que el servidor se cierra y Discourse no recibe ninguna respuesta, de ahí el error.

Así que sospeché que el soporte del puerto 465 parece tener un error (por defecto es SSL, pero no creo que Discourse lo reconozca), por lo que probablemente la conexión SSL nunca se establece.

Cambiar al puerto 25 parece al menos eliminar el error, aunque todavía no estoy recibiendo ningún correo enviado…

EDITAR: Puedo confirmar que el puerto 25 funciona correctamente (al igual que el 587, pero desafortunadamente mi servidor smtp no expone el 587).

No recibí ningún correo antes debido a que la dirección IP del servidor Discourse fue temporalmente puesta en lista negra por el servidor smtp debido a demasiados intentos fallidos.

1 me gusta

Creo que tienes razón.

Y resulta que no eres el primero… al buscar DISCOURSE_SMTP_PORT 465 encontré un montón de problemas similares.

El último contiene un enlace a la (posible) solución.

Con este parche, es posible configurar
DISCOURSE_SMTP_FORCE_TLS=true para usar TLS implícito en el puerto 465
3 Me gusta

También he visto bastantes temas sobre el ‘problema 465’. Sin embargo, mi depuración de correo electrónico para cualquier cosa que no sea obvia no es muy buena, así que he estado citando la guía de solución de problemas:

¿Hay algo que podamos añadir a eso para ayudar a la gente?

2 Me gusta

Bueno, si @schungx puede confirmar que DISCOURSE_SMTP_FORCE_TLS=true es realmente una solución, podemos añadirla.

5 Me gusta

¡Lo intentaré de inmediato!

EDITAR: @RGJ ¡Puedo confirmar que DISCOURSE_SMTP_FORCE_TLS: true en app.yml resuelve el problema con éxito! :champagne:

Sugiero una advertencia en negrita que diga Si usas el puerto 465, configura DISCOURSE_SMTP_FORCE_TLS: true, ¿o no debería Discourse ser lo suficientemente inteligente como para detectarlo?

4 Me gusta

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.