皆さん、こんにちは。
Discourse の SMTP 設定に苦労しており、かなりの難題となっています。多くの投稿を調べましたが(例えばこちら)、うまくいきませんでした。
状況は以下の通りです。問題は、使用を求められているユーザー名とパスワードの形式と長さに起因しているのではないかと疑っています。SMTP サーバーとして Azure Communication Service を利用しており、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
ユーザー名とパスワードを単一引用符、二重引用符、または省略するなど、さまざまな方法で囲んで試しましたが、結果は同じでした。
他に試せることについてのポインタや提案があれば、大いに感謝します。