자체 호스팅 Discourse에서 Namecheap Private Email(SMTP)로 메일 전송 오류

안녕하세요,

자체 호스팅된 Discourse 설치에서 발신 메일(outbound mail) 설정을 시도해 왔지만 아직까지 성공하지 못했습니다. Namecheap 지원팀의 도움까지 받았지만 작동하지 않았습니다. 여기에서 제가 놓친 부분이 무엇인지 알려주실 수 있는 분이 있을까요.

설정 (Setup)

  • 호스팅: DigitalOcean 드롭렛, 공식 Docker 방식으로 Discourse 설치 (/var/discourse).
  • 도메인: Cloudflare로 관리 (사이트는 프록시된 A 레코드, MX/메일 레코드는 DNS 전용).
  • 메일 제공업체: Namecheap Private Email.
  • Discourse 버전: 최신 tests-passed 브랜치.

정상 작동하는 부분

  • hello@domain.com 수신함에 메일을 정상적으로 받을 수 있습니다.
  • MX, SPF, DKIM, DMARC DNS 레코드가 설정 및 검증되었습니다.
  • Gmail에서 hello@domain.com으로 메일을 보내는 수신 과정이 정상 작동합니다.

실패하는 부분

  • 발신 메일(활성화 이메일, Discourse에서 보낸 테스트 이메일)이 전혀 도착하지 않습니다.
  • Namecheap 지원팀에서 자격 증명과 설정이 정확하다고 확인해 주었지만, 서버에서 실패하는 이유는 설명하지 못했습니다.

현재 app.yml 설정

DISCOURSE_SMTP_ADDRESS: mail dot privateemail dot com
DISCOURSE_SMTP_PORT: 587
DISCOURSE_SMTP_USER_NAME: hello at domain dot com
DISCOURSE_SMTP_PASSWORD: “PASSWORD”
DISCOURSE_SMTP_ENABLE_START_TLS: true
DISCOURSE_SMTP_DOMAIN: domain dot com
DISCOURSE_NOTIFICATION_EMAIL: hello at domain dot com DISCOURSE_SMTP_AUTHENTICATION: login

포트 465도 다음과 같이 시도해 보았습니다:

DISCOURSE_SMTP_PORT: 465
DISCOURSE_SMTP_ENABLE_START_TLS: false
DISCOURSE_SMTP_SSL: true

수행한 디버깅 단계

  • Cloudflare의 DNS 레코드(MX, SPF, DKIM, DMARC)가 정확한지 확인했습니다.
  • UFW/iptables로 로컬에서 포트 587과 465가 차단되지 않았는지 확인했습니다.
  • /etc/gai.conf에서 IPv4 우선순위를 강제 적용해 보았습니다.
  • ncopenssl로 테스트 → 여전히 타임아웃 발생.
  • Namecheap의 공식 지침(587 STARTTLS 또는 465 SSL)을 따르더라도 서버에서는 실패합니다.

질문

Namecheap Private Email을 Discourse SMTP와 함께 성공적으로 설정해 보신 분이 계신가요?

  • DigitalOcean 드롭렛이 mail.privateemail.com의 587/465 포트로 연결할 때 알려진 문제가 있나요?
  • Namecheap SMTP를 포기하고 트랜잭션 메일 서비스(Postmark, Mailgun, SendGrid)를 사용하는 것이 좋을까요?
  • 이 제공업체를 위해 필요한 특별한 app.yml 플래그가 있나요?

사전에 조언을 주시면 감사하겠습니다. 이 설정 문제로 벽에 부딪혀 있습니다.

Mailgun, Brevo 또는 Amazon SES와 같은 트랜잭션 메일 서비스를 사용해야 합니다. 이는 포럼에서 이메일을 보내는 가장 최적의 방법입니다.

discourse/docs/INSTALL-email.md at main · discourse/discourse · GitHub 를 참고하세요.

아래 링크도 확인해 보시는 것이 좋습니다:

에러 메시지는 무엇인가요?

다른 사용자들도 보고한 것처럼 DigitalOcean이 발신 메일을 차단하고 있나요?

포트 2525를 시도해 보셨나요?

답변해 주셔서 정말 감사합니다.

@pfaffman Digital Ocean이 발신 메일을 차단한다는 사실은 몰랐습니다. 아직 2525 포트는 시도해 보지 않았습니다.

검색을 하다가 Digital Ocean이 모든 발신 메일을 차단한다는 글을 찾았습니다. Why is SMTP blocked? | DigitalOcean Documentation

아래 명령어로 간단한 테스트를 해 보았습니다.

nc -vz ``smtp.mailgun.org`` 2525

이 테스트는 통과했습니다. 587과 465 포트는 실패했습니다.

해당 포트 개방을 요청하는 티켓을 열었습니다.

포트 개방이 거부된다면 Mailgun 쪽을 살펴봐야 할 것 같습니다. 무료였으면 좋겠습니다.

계정 활성화로 플랜 유형 설정을 변경한 후 지원팀에 문의하면 무료 플랜에서도 문제없이 사용할 수 있을 겁니다.

이건 항상 BT 메일이나 Gmail과 매우 유사한 것으로 생각했죠. Discourse에는 적합하지 않습니다.

수신 메일을 위해 POP3 폴링을 사용할 수는 있지만, x86 VPS를 가지고 있으므로 #mail-receiver를 권장합니다.

Digital Ocean이 회신했습니다:

"당신의 SMTP 포트가 차단 해제될 수 있도록 보안 팀이 자세히 검토해 보겠습니다. 요청사항을 진행하기 위해 비즈니스 요구사항에 대한 다음 세부 정보를 공유해 주실 수 있으신가요?

  • 어떤 유형의 이메일을 보낼 예정인지 (예: 거래 관련 이메일, 뉴스레터 등)
  • 자체 이메일 호스팅을 사용할지, 아니면 제3자 발송 서비스를 활용할지 여부
  • 가능하다면 포트 요구사항에 대한 배경 정보 및 표준 포트나 API를 사용할 수 없는 이유를 알려 주십시오.

상세한 답변을 주시면, 제공된 모든 세부 정보를 포함하여 해당 팀에 요청사항을 전달하겠습니다."

그 경우, Mailgun(하루 100통 무료)이나 Brevo(하루 300통 무료)와 같은 트랜잭션 이메일 서비스를 사용하는 것으로 전환해야 합니다. 그런 다음, 해당 포트가 차단되지 않으므로 app.yml 파일에서 포트 2525를 사용하도록 변경할 수 있습니다.

DigitalOcean Support에서 인사드립니다!

포트 25, 465 및 587을 활성화해야 하는 애플리케이션 요구사항이나 비즈니스 니즈가 있다는 점을 이해하고 있습니다. 그러나 현재 정책상 해당 포트에 대한 제한을 해제해 드릴 수 없습니다.

애플리케이션에서 허용된다면 포트 2525와 같은 대체 포트 사용을 권장합니다. 또한, SendGrid의 REST API를 사용하면 전통적인 SMTP 프로토콜 대신 HTTP 요청을 통해 이메일을 보낼 수 있으며, 이 방식이 적합하다면 이를 활용하거나 다른 제3자 발송 서비스를 사용할 수도 있습니다.

추가 질문이 있으시면 언제든지 문의해 주세요. 항상 도와드리겠습니다!

그래서 Mailgun을 시도해 보겠습니다.

이어서 25가 필요 없다고 언급해 보는 건 어떨까요?

수정: 따라서 MailGun이 대신 해 주는 일을 하려면 예를 들어 역방향 DNS를 증명할 필요가 없습니다.

@Ethsim2 감사합니다. Linode처럼, 스팸 메일을 방지하기 위해 모든 것을 차단한 것 같네요. Linode는 요청 시에만 포트를 개방하지만, 괜찮습니다.

MailGun을 사용하겠습니다.

내 생애 처음 겪는 일인데, 막 만든 계정이 바로 차단당했네요 ㅋㅋ
“Mailgun: Your account is temporarily disabled.”

사용할 수 있는 다른 SMTP 서비스가 있을까요?