Difficulté à configurer SMTP dans Discourse avec Azure Communication Service

Salut à tous,

J’ai eu du mal à configurer le SMTP sur mon installation Discourse, et ce fut un véritable défi. J’ai consulté de nombreux posts comme celui-ci sans succès.

Voici le problème : je suspecte que mes difficultés sont liées au format et à la longueur du nom d’utilisateur et du mot de passe que je suis censé utiliser. J’utilise Azure Communication Service pour mon serveur SMTP, qui exige une configuration spécifique impliquant une application Azure Entra (anciennement Azure Active Directory).

Pour aller droit au but, le format du nom d’utilisateur ressemble à ceci (pas les identifiants réels, juste un exemple) :

<Nom de la ressource Azure Communication Services>.<ID de l'application Entra>.<ID du locataire de l'application Entra>

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

Pour plus de détails, consultez ce lien.

Pendant ce temps, le mot de passe doit respecter un format de secret généré par Azure, tel que :

b_C8Q~WjHH~MtFQptMj8wR1KroOZYigGy3A3Zc5M

Maintenant, j’ai réussi à faire fonctionner cette configuration en C# avec des identifiants similaires.

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

Cependant, lorsque j’essaie d’implémenter ces paramètres dans Discourse, les choses commencent à mal tourner. Voici ce que j’ai configuré :

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

Cependant, malgré cette configuration, je continue de recevoir une erreur d’authentification, comme le montre l’extrait de log :

Job exception: Net::SMTPAuthenticationError

J’ai expérimenté en entourant le nom d’utilisateur et le mot de passe de différentes manières : guillemets simples, guillemets doubles, ou même en les laissant de côté. Mais le résultat reste le même.

Auriez-vous des pistes ou des suggestions sur ce que je pourrais essayer d’autre ?

1 « J'aime »

Bonjour, j’ai rencontré le même problème avec Azure Communication Service.

Selon la documentation Microsoft, je pense que Microsoft Entra doit être pris en charge par l’application, mais Discourse ne le prend malheureusement pas en charge.

En attendant, j’attends avec impatience toute autre méthode disponible.

J’ai rencontré le même problème et j’ai trouvé ce sujet lors d’une recherche sur le Web. Il semble que (tout comme avec les serveurs de messagerie Microsoft 365 avant qu’ils n’abandonnent l’authentification basée sur le mot de passe) seul AUTH LOGIN soit pris en charge, et non AUTH PLAIN qui est la valeur par défaut dans Discourse au moment de la rédaction.

Définir DISCOURSE_SMTP_AUTHENTICATION: login dans la configuration du conteneur permet au courrier électronique de fonctionner. Il convient également de noter que par défaut, le seul e-mail « de » autorisé est le DoNotReply@domain.example par défaut. Si vous ne le définissez pas, vos e-mails seront rejetés avec le message « 550 5.3.5 Email sender’s username is invalid ».

4 « J'aime »

On dirait que c’est maintenant corrigé

J’ai également essayé de le configurer en suivant la suggestion ici. Cependant, je n’ai pas réussi à le faire fonctionner non plus, mais je ne trouve aucun journal concernant le problème SMTP. Savez-vous quel fichier journal je dois consulter. Merci.

Vous voudrez peut-être vérifier l’URL /logs.

Si vous déboguez, vous seriez peut-être plus avancé en essayant la tâche rake 'emails:test[your_email]'.

Vous pouvez également définir des variables d’environnement pour essayer différentes choses sans avoir besoin de reconstruire le conteneur, par exemple :

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

J’utilise l’image discourse/discourse 2025.12.0. Fait intéressant, même si je ne définis pas DISCOURSE_SMTP_PASSWORD, le production.log n’affiche aucune erreur, comme si la tâche d’enregistrement de l’utilisateur administrateur n’était pas appelée. Le seul journal disponible est

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)

Vous cherchez https://whateveryoursiteis.com/logs

Édition, problème résolu. Le problème était que la variable d’environnement du nom d’utilisateur devait être DISCOURSE_SMTP_USER_NAME au lieu de DISCOURSE_SMTP_USERNAME.

La configuration ci-dessous fonctionne :

DISCOURSE_SMTP_USER_NAME: <Nom d'utilisateur SMTP du service de communication Azure (n'a pas besoin d'être <Nom de la ressource Azure Communication Services>.<ID de l'application Entra>.<ID de locataire de l'application Entra>>
DISCOURSE_SMTP_PASSWORD: xxx
DISCOURSE_SMTP_DOMAIN: yourdomain
DISCOURSE_NOTIFICATION_EMAIL:  DoNotReply@yourdomain
DISCOURSE_SMTP_AUTHENTICATION: login
DISCOURSE_SMTP_ENABLE_START_TLS: true

vous pouvez exécuter rake admin:create depuis le conteneur pour créer un compte directement

De plus, je viens d’apprendre que la façon dont nous gérons les variables d’environnement a changé - nous ne les examinons plus qu’au démarrage du conteneur.

Si vous souhaitez tester une valeur différente, vous devez modifier /var/www/discourse/config/discourse.conf

:+1: