Всем привет,
У меня возникли сложности с настройкой SMTP на моей установке Discourse, и это оказалось настоящим испытанием. Я перелопатил множество постов, таких как этот, но безрезультатно.
Вот суть дела: я подозреваю, что мои проблемы связаны с форматом и длиной имени пользователя и пароля, которые мне предписано использовать. Я подключаюсь к службе Azure Communication Service в качестве SMTP-сервера, что требует специфической конфигурации с использованием приложения Azure Entra (ранее Azure Active Directory).
Если коротко, формат имени пользователя выглядит примерно так (это не реальные учетные данные, а пример):
<Имя ресурса Azure Communication Services>.<Идентификатор приложения Entra>.<Идентификатор арендатора приложения Entra>
Вот пример: 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 = "Вы выбраны";
string 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("Электронное письмо было успешно отправлено через Smtp.");
}
catch (Exception ex)
{
Console.WriteLine($"Smtp не удался с исключением: {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
Я пробовал заключать имя пользователя и пароль в кавычки разными способами — одинарные, двойные или вообще не заключать их. Но результат остается прежним.
Любые подсказки или предложения, что еще можно попробовать, будут крайне полезны.