Dificultades para configurar SMTP en Discourse con Azure Communication Service

Hola a todos,

He estado lidiando con la configuración de SMTP en mi instalación de Discourse, y ha sido todo un desafío. He investigado numerosos posts como este sin éxito.

Aquí está el resumen: sospecho que mis problemas están relacionados con el formato y la longitud del nombre de usuario y la contraseña que se me exige usar. Estoy utilizando Azure Communication Service para mi servidor SMTP, que requiere una configuración específica que involucra una Azure Entra App (anteriormente Azure Active Directory).

Para ir al grano, el formato del nombre de usuario se ve algo así (no son credenciales reales, solo un ejemplo):

<Nombre del recurso de Azure Communication Services>.<Id de la aplicación Entra>.<Id del inquilino de la aplicación Entra>

Aquí tienes un ejemplo: my-communication-service.7d8233e0-c230-4468-a2de-1d03aa64bb71.49ba4f9c-3b18-43df-b5fd-5e203ba6e031

Para más detalles, consulta este enlace.

Mientras tanto, la contraseña debe cumplir con un formato de secreto generado por Azure, como:

b_C8Q~WjHH~MtFQptMj8wR1KroOZYigGy3A3Zc5M

Ahora, he logrado que esta configuración funcione sin problemas en C# con credenciales similares.

 private static void SendMail()
    {
        string smtpAuthUsername = "my-communication-service.7d8233e0-c230-4468-a2de-1d03aa64bb71.49ba4f9c-3b18-43df-b5fd-5e203ba6e031";
        string smtpAuthPassword = "a~C8Q~WjHH~MtFQptMj8wR1KroOZYigGy3A3Zc5M";

        string sender = "DoNotReply@my-domain.com";
        string recipient = "admin@my-domain";
        string subject = "You a chosen";
        string body = "One gorgeous body";
        string smtpHostUrl = "smtp.azurecomm.net";

        using (var client = new SmtpClient(smtpHostUrl))
        {
            client.Port = 587;
            client.Credentials = new NetworkCredential(smtpAuthUsername, smtpAuthPassword);
            client.EnableSsl = false;

            var message = new MailMessage(sender, recipient, subject, body);

            try
            {
                client.Send(message);
                Console.WriteLine("The email was successfully sent using Smtp.");
            }
            catch (Exception ex)
            {
                Console.WriteLine($"Smtp failed with the exception: {ex.Message}.");
            }
        }
    }

Sin embargo, cuando intento implementar estas configuraciones en Discourse, las cosas empiezan a fallar. Aquí está lo que tengo configurado:

DISCOURSE_SMTP_ADDRESS: smtp.azurecomm.net
DISCOURSE_SMTP_PORT: 587
DISCOURSE_SMTP_USER_NAME: "my-communication-service.7d8233e0-c230-4468-a2de-1d03aa64bb71.49ba4f9c-3b18-43df-b5fd-5e203ba6e031"
DISCOURSE_SMTP_PASSWORD: "b_C8Q~WjHH~MtFQptMj8wR1KroOZYigGy3A3Zc5M"
DISCOURSE_SMTP_ENABLE_START_TLS: true
DISCOURSE_SMTP_DOMAIN: my-domain.com
DISCOURSE_NOTIFICATION_EMAIL: DoNotReply@my-domain.com

Sin embargo, a pesar de esta configuración, sigo recibiendo un error de autenticación como se indica en el fragmento de registro:

Job exception: Net::SMTPAuthenticationError

He experimentado encerrando el nombre de usuario y la contraseña de varias maneras: comillas simples, comillas dobles o incluso dejándolos fuera por completo. Pero el resultado sigue siendo el mismo.

Agradecería cualquier indicación o sugerencia sobre qué más podría intentar.

1 me gusta

Hola, me he encontrado con el mismo problema con Azure Communication Service.

Según Microsoft Docs, creo que podría ser que Microsoft Entra deba ser compatible con la aplicación, pero Discourse desafortunadamente no lo soporta.

Mientras tanto, también estoy esperando cualquier otro método disponible.

Me encontré con el mismo problema y encontré este tema en una búsqueda web, y parece que (al igual que con los servidores de correo electrónico de Microsoft 365 antes de que dejaran de admitir la autenticación basada en contraseñas) solo se admite AUTH LOGIN, no AUTH PLAIN, que es el valor predeterminado en Discourse en el momento de escribir esto.

Establecer DISCOURSE_SMTP_AUTHENTICATION: login en la configuración del contenedor hace que el correo electrónico funcione. Cabe destacar que, por defecto, el único correo electrónico de ‘remitente’ permitido es el predeterminado DoNotReply@domain.example; si no lo configuras, tus correos electrónicos serán rechazados con “550 5.3.5 Email sender’s username is invalid”.

4 Me gusta

Parece que esto ahora está arreglado

También he estado intentando configurarlo siguiendo la sugerencia de aquí. Sin embargo, tampoco he logrado que funcione, pero no encuentro ningún registro sobre el problema de SMTP. ¿Sabe qué archivo de registro debo buscar? Gracias.

Deberás consultar la URL /logs.

Si estás depurando, es posible que avances más probando la tarea rake 'emails:test[your_email]'.

También puedes configurar variables de entorno para probar diferentes cosas sin necesidad de reconstruir el contenedor, por ejemplo:

$ DISCOURSE_SMTP_PORT=587 DISCOURSE_SMTP_USER_NAME=bilbo DISCOURSE_SMTP_PASSWORD=ring rake emails:test'[frodo@shire.net]'

Estoy usando la imagen discourse/discourse 2025.12.0. Curiosamente, incluso si no configuro DISCOURSE_SMTP_PASSWORD, el production.log no muestra ningún error, como si la tarea de registro del usuario administrador no se ejecutara. El único registro disponible es

Started POST “/finish-installation/register” for xxx at 2026-01-09 16:48:11 +0000
Processing by FinishInstallationController#register as HTML
Parameters: {“authenticity_token”=>“xxx”, “email”=>“xxx”, “username”=>“xxx”, “password”=>“[FILTERED]”, “commit”=>“Register”}
Redirected to xxx

Completed 302 Found in 489ms (ActiveRecord: 0.0ms (0 queries, 0 cached) | GC: 131.6ms)

Estás buscando https://whateveryoursiteis.com/logs

Edición, problema resuelto. El problema era que la variable de entorno del nombre de usuario debía ser DISCOURSE_SMTP_USER_NAME en lugar de DISCOURSE_SMTP_USERNAME.

La siguiente configuración funciona:

DISCOURSE_SMTP_USER_NAME: <Nombre de usuario SMTP del servicio de Azure (no necesita ser <Nombre del recurso de Azure Communication Services>.<Id. de aplicación de Entra>.<Id. de inquilino de aplicación de Entra>
DISCOURSE_SMTP_PASSWORD: xxx
DISCOURSE_SMTP_DOMAIN: tudominio
DISCOURSE_NOTIFICATION_EMAIL:  NoResponder@tudominio
DISCOURSE_SMTP_AUTHENTICATION: login
DISCOURSE_SMTP_ENABLE_START_TLS: true

puedes ejecutar rake admin:create desde el contenedor para crear una cuenta directamente

Además, acabo de enterarme de que la forma en que manejamos las variables de entorno ha cambiado: ya no las consultamos excepto al arrancar el contenedor.

Si quieres probar un valor diferente, necesitas editar /var/www/discourse/config/discourse.conf

:+1: