Difficoltà a configurare SMTP in Discourse con Azure Communication Service

Ciao a tutti,

Sto lottando con la configurazione di SMTP sulla mia installazione di Discourse e si è rivelata una sfida non indifferente. Ho esaminato numerosi post come questo senza successo.

Ecco il succo: sospetto che i miei problemi siano legati al formato e alla lunghezza dello username e della password che sono tenuto a utilizzare. Sto utilizzando Azure Communication Service per il mio server SMTP, che richiede una configurazione specifica che coinvolge un’App Azure Entra (precedentemente Azure Active Directory).

Per arrivare al dunque, il formato dello username è simile a questo (non credenziali reali, solo un esempio):

<Nome risorsa Azure Communication Services>.<ID applicazione Entra>.<ID tenant applicazione Entra>

Ecco un esempio: my-communication-service.7d8233e0-c230-4468-a2de-1d03aa64bb71.49ba4f9c-3b18-43df-b5fd-5e203ba6e031

Per maggiori dettagli, consulta questo link.

Nel frattempo, la password deve aderire a un formato di segreto generato da Azure, come ad esempio:

b_C8Q~WjHH~MtFQptMj8wR1KroOZYigGy3A3Zc5M

Ora, ho configurato questo sistema con successo in C# con credenziali simili.

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}.");
        }
    }
}

Tuttavia, quando provo a implementare queste impostazioni in Discourse, le cose iniziano a funzionare male. Ecco cosa ho configurato:

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

Tuttavia, nonostante questa configurazione, continuo a ricevere un errore di autenticazione come da snippet di log:

Job exception: Net::SMTPAuthenticationError

Ho sperimentato racchiudendo lo username e la password in vari modi: virgolette singole, virgolette doppie o anche omettendoli del tutto. Ma il risultato rimane lo stesso.

Qualsiasi suggerimento o consiglio su cos’altro potrei provare sarebbe molto apprezzato.

1 Mi Piace

Ciao, ho riscontrato lo stesso problema con Azure Communication Service.

Secondo Microsoft Docs, penso che potrebbe essere che Microsoft Entra debba essere supportato dall’applicazione, ma Discourse purtroppo non lo supporta.

Nel frattempo, sono anche alla ricerca di altri metodi disponibili.

Ho riscontrato lo stesso problema e ho trovato questo argomento in una ricerca sul web, e sembra che (proprio come con i server di posta elettronica di Microsoft 365 prima che eliminassero l’autenticazione basata su password) sia supportato solo AUTH LOGIN, non AUTH PLAIN che è l’impostazione predefinita in Discourse al momento della scrittura.

Impostare DISCOURSE_SMTP_AUTHENTICATION: login nella configurazione del container fa funzionare l’email. Va notato, inoltre, che per impostazione predefinita l’unica email ‘from’ consentita è quella predefinita DoNotReply@domain.example - se non la imposti, le tue email verranno rifiutate con "550 5.3.5 Email sender’s username is invalid".

4 Mi Piace

Sembra che ora sia stato risolto

Ho anche provato a configurarlo seguendo il suggerimento qui. Tuttavia, anche io non sono riuscito a farlo funzionare ma non riesco a trovare alcun log relativo al problema SMTP. Sai quale file di log dovrei controllare. Grazie.

Dovrai controllare l’URL /logs.

Se stai eseguendo il debug, potresti essere più avanti provando il task rake 'emails:test[your_email]'.

Puoi anche impostare variabili d’ambiente per provare cose diverse senza dover ricostruire il container, ad esempio:

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

Sto usando l’immagine discourse/discourse 2025.12.0. Interessante, anche se non imposto DISCOURSE_SMTP_PASSWORD, il production.log non mostra errori, come se l’attività di registrazione dell’utente amministratore non venisse chiamata. L’unico log disponibile è

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)

Stai cercando https://whateveryoursiteis.com/logs

Modifica, problema risolto. Il problema era che la variabile d’ambiente del nome utente doveva essere DISCOURSE_SMTP_USER_NAME invece di DISCOURSE_SMTP_USERNAME.

La configurazione seguente funziona:

DISCOURSE_SMTP_USER_NAME: <Nome utente SMTP del servizio di comunicazione Azure (non è necessario che sia <Nome risorsa Azure Communication Services>.<ID applicazione Entra>.<ID tenant applicazione Entra>
DISCOURSE_SMTP_PASSWORD: xxx
DISCOURSE_SMTP_DOMAIN: iltuodominio
DISCOURSE_NOTIFICATION_EMAIL:  DoNotReply@iltuodominio
DISCOURSE_SMTP_AUTHENTICATION: login
DISCOURSE_SMTP_ENABLE_START_TLS: true

puoi eseguire rake admin:create dal container per creare un account direttamente

Inoltre, ho appena saputo che il modo in cui gestiamo le variabili d’ambiente è cambiato: non le leggiamo più se non all’avvio del container.

Se vuoi testare un valore diverso, devi modificare /var/www/discourse/config/discourse.conf

:+1: