Outlook SMTP 서버 문제 (SMTPSyntaxError)

안녕하세요 여러분!

CentOS 서버에서 자체 호스팅(self-hosted)된 Discourse 인스턴스를 설정하고 실행하기 위해 여러 가지를 시도해 왔습니다. 대부분은 잘 진행되고 있는 것 같습니다. 호스트네임 등 설정이 모두 완료되었고, Docker 컨테이너도 정상적으로 실행되며 로컬 네트워크 내에서 http://discourse.foo.co를 통해 제 Discourse 인스턴스에 접근할 수 있습니다.

하지만 여기서 막혀 있습니다. 사용하고 있는 SMTP 설정이 작동하지 않아서 첫 번째 사용자를 생성할 수 없으며, 어떤 시도를 해도 계속 Net::SMTPSyntaxError가 발생합니다.

app.yml 파일의 제 SMTP 설정은 다음과 같습니다:

## TODO: 초기 가입 시 관리자 및 개발자로 설정될 쉼표로 구분된 이메일 목록
  ## 예: 'user1@example.com,user2@example.com'
  DISCOURSE_DEVELOPER_EMAILS: 'brian@foo.co'

  ## TODO: 새 계정을 검증하고 알림을 보내는 데 사용되는 SMTP 메일 서버
  # SMTP 주소, 사용자 이름, 비밀번호는 필수입니다
  # 경고: SMTP 비밀번호에 '#' 문자가 포함되어 있으면 문제가 발생할 수 있습니다!
  DISCOURSE_SMTP_ADDRESS: foo.mail.protection.outlook.com
  DISCOURSE_SMTP_PORT: 25
  DISCOURSE_SMTP_USER_NAME: user@foo.co
  DISCOURSE_SMTP_PASSWORD: 특수 문자 '@'와 '/'가 포함된 비밀번호입니다. 비밀번호에는 '#' 특수 문자가 없습니다.
  DISCOURSE_SMTP_AUTHENTICATION: login
  DISCOURSE_SMTP_ENABLE_START_TLS: true         # (선택 사항, 기본값 true)
  #DISCOURSE_SMTP_DOMAIN: discourse.example.com    # (일부 제공업체에서 필수)
  DISCOURSE_NOTIFICATION_EMAIL: 'community@foo.co'    # (알림을 보내는 주소)

Discourse 포럼을 전수 검색해 보았지만 'SMTPSyntaxError’를 검색해도 결과가 나오지 않습니다. 구글에서도 도움이 되는 해결책을 찾지 못하고 있습니다.

동일한 SMTP 설정을 Bamboo와 Jira 서버에 입력하면 완벽하게 작동하며 이메일도 정상적으로 전송됩니다.

또한 https://dnschecker.org/smtp-test-tool.php와 같은 온라인 테스트 도구를 사용해 보았는데, 테스트 이메일을 정상적으로 전송할 수 있었습니다. 예를 들어, 위와 동일한 세부 정보를 입력하면 다음과 같은 내용을 가진 테스트 이메일이 제 수신함에 성공적으로 전송됩니다.

SMTP 호스트: foo.mail.protection.outlook.com.
포트: 25
명시적 TLS 암호화 사용: 아니요
암시적 TLS/SSL 암호화 사용: (빈 값)
인증 사용: 아니요
발신자 이메일: test@foo.co
수신자 이메일: brian@foo.co
```\n
도움을 주시면 감사하겠습니다.
Brian

컨테이너에서 SMTP 서버로 가는 트래픽을 덤프(dump)하여 와이어(wire)에서 정확히 무슨 일이 일어나고 있는지 확인하는 것을 권장합니다.

컨테이너 내에서 다음을 실행하여 이메일 전송을 트리거할 수 있습니다:

rake 'emails:test[your.email.address@your.domain]' 

그리고 예를 들어 다음과 같은 내용을 볼 수 있을 것입니다:

root@michael-discourse-docker-app:/var/www/discourse# rake 'emails:test[michael@contoso.com]'
Testing sending to michael@contoso.com using mail.contoso.net:587, username:michael with plain auth.
SMTP server connection successful.
Sending to michael@contoso.com. . . 
Mail accepted by SMTP server.
Message-ID: e7adb5c4-f404-4800-b070-631b06ff5335@mx1.contoso.com

이것도 몇 가지 힌트를 줄 수 있습니다.

Michael, 안녕하세요.

제안해 주셔서 감사합니다. 하지만 ./discourse-doctor를 사용할 때와 동일한 오류가 발생하는 것 같습니다.

root@discourse-app:/var/www/discourse# rake 'emails:test[brian.lui@foo.co]'
Testing sending to brian.lui@foo.co using foo.mail.protection.outlook.com:25, username:user@foo.co with login auth.
======================================== ERROR ========================================
                                    UNEXPECTED ERROR

Net::SMTPSyntaxError

====================================== SOLUTION =======================================
This is not a common error. No recommended solution exists!

Please report the exact error message above to https://meta.discourse.org/
(And a solution, if you find one!)
=======================================================================================

Brian

컨테이너 내에서 명령을 실행했을 때 (Discourse SMTP 문제 해결 가이드에서 확인한 대로):

openssl s_client -connect foo.mail.protection.outlook.com:25 -starttls smtp

모든 것이 정상적으로 보이지만 250 DSN 대신 250 SMTPUTF8가 표시됩니다. 그런 다음 EHLO "i am here" 명령을 입력하려고 하면 아무 반응이 없다가 결국 타임아웃이 발생합니다:

451 4.7.0 Timeout waiting for client input [YT1PEPF00001E8C.CANPRD01.PROD.OUTLOOK.COM 2024-02-23T17:51:16.770Z 08DC342D15BDD245] read:errno=0

저도 같은 결과를 얻고 있습니다.

이 문제는 Discourse가 아니라 메일 서버 자체에 있는 것으로 보입니다. 다른 제안은 없습니다.

이 서버가 메일 전송에 사용될 것이라고는 기대하지 않습니다. 이 정보가 정확한지 확인해 주시겠습니까?

다른 분들이 다른 전송 서버를 사용하여 정상적으로 작동하도록 설정한 사례를 확인했습니다: