No se pueden enviar correos electrónicos usando el servidor SMTP local

He probado el servidor SMTP con Telnet:
Telnet se conectó al servidor SMTP.
Telnet me permitió autenticarme en el servidor SMTP.
Telnet me permitió enviar un correo electrónico correctamente utilizando el servidor SMTP, y utilicé exactamente los mismos valores en Telnet que los presentes en el archivo /var/discourse/containers/app.yaml.

Discourse doctor indica que Discourse se conectó correctamente al servidor SMTP.
Discourse doctor indica que Discourse no pudo enviar el correo de prueba.

Por lo tanto, Discourse tiene errores que le impiden enviar correos electrónicos.

Sugiero que algo en tu configuración está roto, más que errores dentro de Discourse. :wink:

2 Me gusta

¿Acaso estás usando smtp-relay.gmail.com, tal vez desde DigitalOcean? Eso parece haber dejado de funcionar recientemente y nadie está seguro aún de la razón.

No. Porque el servidor SMTP funciona perfectamente, tal como ya se describió, y Discourse está instalado correctamente y muestra la pantalla que solicita el correo de registro del administrador. Sin embargo, ese correo no se envía.

Estoy usando un servidor SMTP local ubicado en la misma máquina que el contenedor Docker de Discourse.

He encontrado un error en /var/discourse/shared/standalone/log/rails/production.log:

Rendering layouts/email_template.html.erb
  Rendered layouts/email_template.html.erb (Duration: 0.1ms | Allocations: 32)
Delivered mail f915c15e-9c4d-4d4e-9527-81bc4984540c@forum.domain.com (63.7ms)
Job exception: hostname "mail.forum.domain.com" does not match the server certificate

¿Qué significa este error?

3 Me gusta

Parece que el mensaje de error anterior se refiere al certificado SSL del servidor.

El certificado SSL en el servidor es correcto y tiene el nombre de host adecuado.

Parece tratarse de un error en Discourse, donde Discourse no puede detectar correctamente el certificado SSL del servidor.

Esto no parece ser un error en Discourse. Parece un problema en la configuración del resolvedor DNS del host o en el certificado SSL.

Dado que telnet no utiliza SSL, supongo que por eso encontraste que funcionaba. En Linux, quizás puedas avanzar un poco más en las pruebas utilizando OpenSSL para probar la conexión y examinar los certificados.

Hay algo de información aquí que puede ayudar: https://docs.pingidentity.com/bundle/solution-guides/page/iqs1569423823079.html

El HTTPS en el sitio está funcionando porque muestra el candado verde en la barra de direcciones. No hay ningún problema con el certificado SSL del sitio. El problema radica en la forma en que Discourse detecta el certificado SSL.

Ese error no se refiere al certificado del sitio, sino al certificado de tu servicio SMTP.

2 Me gusta

El certificado del servicio SMTP es simplemente el certificado SSL del servidor, no el certificado SSL del sitio web. El certificado SSL del servidor es correcto y funciona.

Para configurar un servidor SMTP local en la misma máquina que el contenedor de Discourse, este no especifica exactamente cuáles son los valores correctos para la configuración SMTP en app.yml. Esto genera mucha confusión y errores.

En la configuración de app.yml, Discourse no aclara claramente qué debe ser DISCOURSE_SMTP_ADDRESS.

En realidad, es subdominio.dominio.com, y no mail.subdominio.dominio.com.

Valores correctos:
DISCOURSE_SMTP_ADDRESS: foro.dominio.com
DISCOURSE_SMTP_PORT: 587
DISCOURSE_SMTP_USER_NAME: postmaster@foro.dominio.com
DISCOURSE_SMTP_PASSWORD: "contraseña"
DISCOURSE_SMTP_ENABLE_START_TLS: true           # (opcional, valor predeterminado true)

Discourse no aclara claramente qué es el “certificado del servidor” en el mensaje de error que aparece después de que falla el envío del correo de registro inicial. El mensaje de error se encuentra en:
/discourse/shared/standalone/log/rails/production.log
“Excepción del trabajo: el nombre de host “mail.foro.dominio.com” no coincide con el certificado del servidor”.

Sin embargo, en realidad, el “certificado del servidor” es simplemente el certificado SSL del servidor.
Además, en el mensaje de error, Discourse menciona incorrectamente “nombre de host”, cuando en realidad lo que se refiere es DISCOURSE_SMTP_ADDRESS.

Hubo dificultades debido a la ambigüedad de Discourse.

La solución fue simplemente establecer el certificado SSL del servidor en el certificado SSL correcto.

Cuando se publicó el problema en el foro de Discourse, hubo muchas respuestas engañosas y poco claras.

Discourse debería solucionar estos problemas.

2 Me gusta

Ahora el doctor de Discourse indica que el correo se envió:

Enviando correo a admin@email.com. . . 
Probando el envío a admin@email.com usando forum.domain.com:587.
Conexión exitosa con el servidor SMTP.
Enviando a admin@email.com. . . 
Correo aceptado por el servidor SMTP.

Sin embargo, no hay ningún correo en la bandeja de entrada ni en la carpeta de spam del destinatario.

¿Cómo se puede solucionar este problema?

Revisa los registros de tu servidor SMTP local. Si Discourse lo ha entregado correctamente al servidor SMTP, ya no está bajo el control de Discourse.

En los registros de Exim4 aparece un mensaje de error, ¿qué significa?

2021-01-21 00:39:39 H=(localhost.localdomain) [172.17.0.2] X=TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256 CV=no F=<noreply@forum.domain.com> A=dovecot_plain:postmaster@forum.domain.com rejected RCPT <admin@email.com>: La verificación del remitente falló