大家好,
我一直在努力在我的 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
我尝试过用各种方式将用户名和密码括起来——单引号、双引号,甚至完全不括起来。但结果都一样。
如果您能提供任何提示或建议,我将不胜感激。