在 Discourse 中使用 Azure Communication Service 配置 SMTP 时遇到困难

大家好,

我一直在努力在我的 Discourse 安装中设置 SMTP,这确实是一个挑战。我查阅了许多帖子,例如这一个,但都没有成功。

情况是这样的:我怀疑我的问题与我必须使用的用户名和密码的格式及长度有关。我正在使用 Azure Communication Service 作为我的 SMTP 服务器,这需要一种特定的配置,其中涉及 Azure Entra 应用程序(以前称为 Azure Active Directory)。

直奔主题,用户名格式大致如下(不是实际凭据,只是一个示例):

<Azure Communication Services 资源名称>.<Entra 应用程序 ID>.<Entra 应用程序租户 ID>

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

有关更多详细信息,请查看此链接

同时,密码需要符合 Azure 生成的密钥格式,例如:

b_C8Q~WjHH~MtFQptMj8wR1KroOZYigGy3A3Zc5M

现在,我已经使用类似的凭据在 C# 中成功设置了此功能。

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

但是,当我尝试在 Discourse 中实现这些设置时,事情就开始出错了。这是我的配置:

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

但是,尽管进行了此设置,我仍然收到身份验证错误,如日志片段所示:

Job exception: Net::SMTPAuthenticationError

我尝试过用各种方式将用户名和密码括起来——单引号、双引号,甚至完全不括起来。但结果都一样。

如果您能提供任何提示或建议,我将不胜感激。

1 个赞

您好,我在 Azure Communication Service 中遇到了同样的问题。

根据 Microsoft Docs,我认为可能是因为 Microsoft Entra 必须得到应用程序的支持,而不幸的是 Discourse 不支持这一点。

同时,我也期待其他可用的方法。

我遇到了同样的问题,在网络搜索中找到了这个主题,看起来(就像微软 365 电子邮件服务器在放弃基于密码的身份验证之前一样)只支持 AUTH LOGIN,而不支持 AUTH PLAIN,而 AUTH PLAIN 是 Discourse 在撰写本文时默认支持的。

在容器配置中设置 DISCOURSE_SMTP_AUTHENTICATION: login 可以使电子邮件正常工作。另外值得注意的是,默认情况下,唯一允许的“发件人”电子邮件是默认的 DoNotReply@domain.example - 如果你不设置这个,你的电子邮件将被拒绝,并显示“550 5.3.5 Email sender’s username is invalid”。

4 个赞

看起来现在已经修复了