Discourse에서 Azure Communication Service로 SMTP 설정이 안 돼요

여러분 안녕하세요,

Discourse 설치 환경에서 SMTP를 설정하는 데 고생하고 있는데, 꽤나 까다로운 문제입니다. 이 게시물을 포함한 수많은 게시물을 살펴보았지만 해결하지 못했습니다.

상황은 이렇습니다. 제가 겪는 문제는 사용해야 하는 사용자 이름과 비밀번호의 형식과 길이에 관련이 있을 것으로 추정됩니다. SMTP 서버로 Azure Communication Service를 사용하고 있으며, 이는 Azure Entra App(구 Azure Active Directory)을 포함한 특정 구성을 요구합니다.

핵심은 다음과 같습니다. 사용자 이름 형식은 다음과 같습니다(실제 인증 정보가 아닌 예시입니다):

<Azure Communication Services 리소스 이름>.<Entra Application Id>.<Entra Application Tenant 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

사용자 이름과 비밀번호를 다양한 방식으로(단일 따옴표, 이중 따옴표, 또는 아예 따옴표를 붙이지 않는 등) 감싸서 시도해 보았지만 결과는 동일합니다.

그 외 시도해 볼 수 있는 다른 방법이 있다면 조언이나 제안을 주시면 감사하겠습니다.

안녕하세요, Azure Communication Service에서도 동일한 문제를 겪고 있습니다.

Microsoft 문서에 따르면, 애플리케이션이 Microsoft Entra를 지원해야 하지만, 안타깝게도 Discourse는 이를 지원하지 않는 것 같습니다.

그동안 다른 이용 가능한 방법도 찾아보고 있습니다.

저도 동일한 문제를 겪었고 웹 검색을 통해 이 주제를 찾았습니다. (이전 Microsoft 365 메일 서버가 비밀번호 기반 인증을 중단하기 전과 마찬가지로) 현재 시점에서는 AUTH PLAIN이 아닌 AUTH LOGIN만 지원되는 것으로 보입니다. Discourse에서는 기본적으로 AUTH PLAIN이 사용되도록 설정되어 있습니다.

컨테이너 설정에서 DISCOURSE_SMTP_AUTHENTICATION: login으로 설정하면 이메일이 정상적으로 작동합니다. 참고할 점으로, 기본적으로 허용되는 ‘from’ 이메일 주소는 기본값인 DoNotReply@domain.example뿐입니다. 이 값을 설정하지 않으면 “550 5.3.5 Email sender’s username is invalid” 오류로 인해 이메일이 거부됩니다.

@justinm 덕분에 이제 수정된 것 같습니다.

저도 여기의 제안을 따라 설정을 시도해 보았습니다. 하지만 작동하지 않았고, SMTP 문제와 관련된 로그도 찾을 수 없었습니다. 어떤 로그 파일을 확인해야 하는지 아시나요? 감사합니다.

/logs URL을 확인해 보세요.

디버깅 중이라면 rake 'emails:test[your_email]' 작업을 시도하는 것이 더 빠를 수 있습니다.

컨테이너를 다시 빌드하지 않고도 환경 변수를 설정하여 다른 설정을 시도할 수 있습니다. 예를 들어:

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

discourse/discourse 2025.12.0 이미지를 사용 중입니다. 흥미롭게도 DISCOURSE_SMTP_PASSWORD를 설정하지 않았음에도 production.log에는 아무런 오류가 표시되지 않습니다. 마치 관리자 사용자 등록 작업이 호출되지 않는 것처럼 보입니다. 현재 확인할 수 있는 로그는 다음과 같습니다.

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)

https://whateveryoursiteis.com/logs를 찾고 계십니다.

수정: 문제 해결됨. 원인은 사용자 이름 환경 변수가 DISCOURSE_SMTP_USERNAME이 아니라 DISCOURSE_SMTP_USER_NAME이어야 한다는 것이었습니다.

아래 설정이 작동합니다:

DISCOURSE_SMTP_USER_NAME: <Azure communication service SMTP user name (does not need to be <Azure Communication Services Resource name>.<Entra Application Id>.<Entra Application Tenant Id>>
DISCOURSE_SMTP_PASSWORD: xxx
DISCOURSE_SMTP_DOMAIN: yourdomain
DISCOURSE_NOTIFICATION_EMAIL:  DoNotReply@yourdomain
DISCOURSE_SMTP_AUTHENTICATION: login
DISCOURSE_SMTP_ENABLE_START_TLS: true

컨테이너에서 rake admin:create를 실행하면 계정을 직접 생성할 수 있습니다.

또한, 환경 변수 처리 방식이 변경되었음을 방금 알게 되었습니다. 이제 컨테이너 시작 시를 제외하고는 환경 변수를 더 이상 참조하지 않습니다.

다른 값을 테스트하려면 /var/www/discourse/config/discourse.conf 파일을 수정해야 합니다.

:+1: