이메일이 작동하지 않음; Net::SMTPAuthenticationError

DigitalOcean에서 Discourse 서버를 호스팅하고 있으며, 도메인은 PorkBun에서, 메일 서버는 MailGun을 사용하고 있습니다.

MailGun 계정은 활성화되어 있고, 도메인(discourse.mydomain.com)은 mg.mydomain.com과 함께 사용하도록 검증되었습니다. 모든 DNS TXT 레코드가 올바르게 설정되어 있습니다.

여기 있는 스레드의 모든 문제 해결 단계를 여러 번 수행했습니다: Troubleshoot email on a new Discourse install

호스트에서 telnet을 사용하여 수동으로 이메일을 보내는 데에는 문제가 없습니다(https://serverfault.com/questions/49935/easiest-way-to-send-a-test-email-from-a-server-to-test-settings)

app.yml에는 다음 내용이 포함되어 있습니다.

  DISCOURSE_DEVELOPER_EMAILS: 'myemail@gmail.com'
  DISCOURSE_SMTP_ADDRESS: smtp.mailgun.org
  DISCOURSE_SMTP_PORT: 587
  DISCOURSE_SMTP_USER_NAME: mail
  DISCOURSE_SMTP_PASSWORD: "12345678901234567890"
  DISCOURSE_SMTP_DOMAIN: mg.mydomain.com
  DISCOURSE_NOTIFICATION_EMAIL: admin@mg.mydomain.com

discourse-doctor를 실행하거나 ./launcher enter app을 실행한 후 rake 'emails:test[mail@mg.mydomain.com]'를 실행하면 다음 오류가 발생합니다.

======================================== ERROR ========================================
                                    UNEXPECTED ERROR

Net::SMTPAuthenticationError

====================================== 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!)
=======================================================================================

수동으로 메일을 보내는 데 문제가 없으므로 Discourse 쪽에 문제가 있는 것 같습니다. 구글과 이 포럼에서 몇 시간 동안 검색해 보았지만 아직 해결책을 찾지 못했습니다. 혹시 아이디어가 있으신 분 계신가요?

사용자 이름 또는 비밀번호에 문제가 있습니다. 별표(*)나 작은따옴표(')와 같이 이스케이프 처리가 필요한 문자가 비밀번호에 포함되어 있을 수 있습니다(해당 문자가 포함되지 않도록 비밀번호를 변경하는 것이 가장 쉬울 수 있음).

새로운 Discourse 설치에서 이메일 문제 해결을 참고해 보세요.

비밀번호에는 해당 문자가 포함되어 있지 않습니다. 실제로는 MailGun에서 자동 생성된 비밀번호로, 문자와 숫자, 그리고 몇 개의 ‘-’ 문자만 포함되어 있습니다. 꽤 긴 비밀번호입니다.

그게 제 최선의 추측입니다. 새 비밀번호를 생성하거나, 또는 다시 복사해서 붙여넣어 보세요. 이 문제가 Discourse의 버그일 가능성은 극히 낮습니다.

DISCOURSE_SMTP_USER_NAME가 잘못되었을 가능성이 높습니다. mail만으로는 Mailgun에서 인증을 받을 수 없습니다. mail@mg.mydomain.com이어야 할 것입니다.

DISCOURSE_SMTP_DOMAIN이 사용자의 도메인이라고 생각하시는 것 같습니다. 그렇지 않습니다. 이 값은 EHLO 도메인입니다. 거의 확실히 설정할 필요가 없습니다.

telnet으로 테스트할 때 사용자 이름으로 "mail@mg.mydomain.com"을 사용했는데 작동했습니다. 그래서 이제 DISCOURSE_SMTP_USER_NAME에 해당 값을 넣어 다시 시도해 보겠습니다.

DISCOURSE_SMTP_DOMAIN이 사용자 도메인이라고 생각하시는 것 같은데, 아닙니다. EHLO 도메인입니다. 설정할 필요가 없을 수도 있습니다.

이것이 무슨 의미인지 잘 모르겠습니다.

MailGun에는 mg.mydomain.com을, Discourse에는 discourse.mydomain.com을 사용했습니다. 현재 mydomain.com에 대해 DNS 레코드를 설정해 두지 않았고, Discourse 서브도메인과 Mailgun DNS용 TXT 레코드만 설정되어 있습니다.

DISCOURSE_SMTP_DOMAIN 줄을 제거하세요. 거의 확실하게 필요하지 않습니다.

이것은 SMTP 협상 시 HELO/EHLO 도메인으로 사용됩니다.

오, 맞다. telnet으로 테스트했을 때, 다음 주소들에서 모두 이메일을 보낼 수 있었습니다.

  • mail@discourse.mydomain.com
  • mail@mydomain.com
  • mail@mg.mydomain.com

실제로 어떤 주소를 사용해야 하는지 모르겠네요. 이게 중요할까요?

그것은 여러분의 설정과 메일 플로우를 어떻게 구성하고 싶은지에 따라 달라집니다.

이제 작동합니다. 도움 주신 모든 분들께 감사드립니다 :slight_smile:

해결 방법은 아래처럼 사용하는 것이었습니다.

  DISCOURSE_SMTP_USER_NAME: mail@mg.mydomain.com

아래처럼 사용하는 대신입니다.

  DISCOURSE_SMTP_USER_NAME: mail