메일 수신함에서는 메일을 받을 수 있지만 Discourse에서는 안 돼요?

이것은 초기 설치용이고, 저는 DNS 전문가와는 거리가 멉니다! 현재 제 상황은 다음과 같습니다:

  • 발신 이메일 테스트는 정상적으로 작동하고 있습니다. MailGun을 사용 중이며, 권장하는 “mg” 서브도메인을 사용하고 있습니다. 포트 2525로 전송하고 있습니다. 설정의 해당 필드에 웹훅용 MailGun API를 입력해 두었습니다 (API가 세 개나 있더라고요—이게 맞는 건가요??). 또한 DNS 설정에 mg 서브도메인용 MX 레코드도 입력해 두었습니다. MailGun의 검증 체크와 mail-tester.com 모두 정상적으로 작동한다고 표시되고 있습니다.
  • 수신은 "inbound"라는 서브도메인으로 설정되어 있습니다. Gmail 계정에서 fake@inbound.[mydomain].org로 이메일을 보내면, 해당 이메일이 mail-receiver 로그에 도착하는 것을 확인할 수 있습니다. 그러나 Discourse의 설정 > 이메일을 통해 같은 주소로 테스트 이메일을 보내면, 이메일이 사라지는 것 같습니다—거절함(Rejected)에도 아무것도 표시되지 않습니다. 나머지는 Straightforward direct-delivery incoming mail을 사용했습니다.

설치 과정에서 제가 저지른 다른 실수들 때문에, 처음부터 다시 시작하기로 결정했습니다: 드롭렛을 삭제하고 Discourse를 재설치했으며, 모든 것을 처음부터 다시 진행 중입니다. 다만, MailGun 계정은 삭제하지 않았고, 실제로는 이전과 동일한 API 웹훅을 사용 중입니다. 이것이 문제가 될 수 있을까요? 하지만 저는 새로운 Discourse에서 생성된 API 키는 사용하고 있습니다 (구 키는 당연히 드롭렛을 삭제하면서 사라졌으니까요).

생각할 수 있는 다른 가능성은 mail-receiver.yml의 엔드포인트일 것입니다. 제 설정은 다음과 같습니다: DISCOURSE_MAIL_ENDPOINT: 'https://inbound.[mydomain].org/admin/email/handle_mail'

어디에 문제가 있는지 의견이 있을까요? (더 큰 문제는, 얼마 전까지 드롭렛을 삭제하기 전에는 모든 것이 정상적으로 작동하고 있었다는 점입니다. 저는 apparently 천천히 배우는 것 같습니다 :stuck_out_tongue_winking_eye:). 모두 감사합니다!

이것은 이메일 도메인이 아니라 포럼의 도메인이어야 합니다. 포럼이 inbound.[mydomain].org에 있지 않은지 확인해 주시겠습니까? 예를 들어, 메타(Meta)가 이 방법을 사용한다면 URL은 다음과 같이 보일 것입니다:

DISCOURSE_MAIL_ENDPOINT: 'https://meta.discourse.org/admin/email/handle_mail'

그리고… 이것은 메일건(Mailgun)과는 무관합니다. 다만 메일건이 도메인에 MX 레코드를 추가하라고 지시하는 것은 무시해야 합니다. 아래 내용 참조:

참고: 메일건과 같은 발신 이메일 제공업체는 서버로 가리키는 MX 레코드를 추가하라고 요청할 수 있습니다. 포럼의 MX 레코드가 포럼 도메인 이름만 가리키도록 이러한 레코드를 제거해야 합니다. 이메일을 보낼 수 있도록 SPF와 DKIM 레코드는 여전히 발신 이메일 제공업체 서버를 가리켜야 합니다.

@tobiaseigen 점점 가까워지고 있어요! 엔드포인트에서 수신 메일 서브도메인을 제거하여 변경을 했습니다. 저장한 후 메일 리시버를 재시작했습니다(제가 뭘 하고 있는지 잘 모르기 때문에요!). 테스트를 해봤지만, 여전히 작동하지 않습니다. 그러다 앱 전체를 다시 빌드했습니다. 그다음 서로 다른 이메일 주소를 사용하여 두 개의 새 계정을 만들었습니다. 그리고 관리자 계정으로 이 계정 중 하나에게 PM(개인 메시지)을 보냈습니다. 예상대로 이메일이 생성되었습니다. 그런 다음 이메일로 해당 PM에 회신했습니다. 메일 로그에 나타난 결과는 다음과 같습니다:

<22>Nov 25 02:38:20 postfix/pipe[89]: AB09913F5CB: to=<replies+da32f82583043bb63fee8be53f9bd3fd@inbound.[mydomain].org>, relay=discourse, delay=0.35, delays=0.19/0/0/0.15, dsn=4.3.0, status=deferred (temporary failure)

정말 점점 가까워지고 있는 것 같습니다! 일시적 실패(temporary failure)의 원인이 무엇인지 잘 모르겠네요. 13분이나 지났는데도 아직 Discourse로 전달되지 않고 있습니다. 이상하네요.

참고로, admin@[mydomain].org 이메일 주소가 다른 메일호스트에서 처리되도록 하려고 “inbound” 서브도메인을 만들었습니다.

도메인 이름 사용법에 대해 조금 이해하기 어려운 부분이 있습니다. 제 사이트에서는 DISCOURSE_MAIL_ENDPOINT와 수신 이메일을 위한 MX 레코드가 동일한 도메인으로 설정되어 있으며, 이는 Discourse 서버를 가리키고 있습니다. Configure direct-delivery incoming email for self-hosted sites with Mail-Receiver 의 원 게시글에서 설명된 내용과 같습니다. 반면, 질문자님은 서로 다른 도메인을 사용하려는 것으로 보입니다.

일반적으로 Discourse에는 forum.mydomain.org 형태의 서브도메인을 사용하여 포럼을 메인 웹사이트(mydomain.org)와 이메일 서비스와 분리하는 것이 좋습니다.

설명해 드릴게요 :slightly_smiling_face: 단순화를 위해 제 도메인을 thesite.org라고 가정하겠습니다. 메일 수신 로그에서 SSL 문제를 발견했습니다:
<19>Nov 25 19:11:29 receive-mail[160]: Failed to POST the e-mail to https://inbound.thesite.org/admin/email/handle_mail: hostname "inbound.thesite.org" does not match the server certificate (OpenSSL::SSL::SSLError)

질문에 답하자면, 제가 추구했던 두 가지 목표는 매우 흔한 것들이라고 생각합니다:

  1. admin@thesite.org가 관리자에게 연락하기 위한 주소가 됩니다.
  2. thesite.org가 포럼을 시작합니다 (서브도메인 없음).

현재 제 Namecheap DNS 설정은 다음과 같습니다 (TTL = Auto, Priority = 10):

1   A 레코드   @                  (IP 주소)     
2   A 레코드  inbound.            (IP 주소)    
3   CNAME     email.mg.           mailgun.org.   
4   CNAME     inbound.            thesite.org.   
5   CNAME     www.                thesite.org.    
6   TXT       @                   forward-email=(stuff)
7   TXT       mg                  v=spf1 include:mailgun.org ~all
8   TXT       smtp._domainkey.mg. k=rsa; p=(stuff)
9   MX        @                   mx1.forwardemail.net.  
10  MX        @                   mx2.forwardemail.net.
11  MX        inbound.            thesite.org.
12  MX        mg.                 mxa.mailgun.org.
13  MX        mg.                 mxb.mailgun.org.

제 containers/mail-receiver.yml 설정은 다음과 같습니다::
MAIL_DOMAIN: inbound.thesite.org
DISCOURSE_MAIL_ENDPOINT: 'https://thesite.org/admin/email/handle_mail'
DISCOURSE_API_KEY: (stuff)
DISCOURSE_API_USERNAME: system ← API 키와 동일
* 참고—> LetsEncrypt 줄은 그대로 두었습니다 ("#"를 제거하지 않음)

다른 설정들:

  • 명령줄을 통해 호스트명을 inbound.thesite.org로 변경
  • 연락처 이메일 = admin@thesite.org
  • 알림 이메일 = noreply@mg.thesite.org
  • 답장용 이메일1 = replies+%{reply_key}@inbound.thesite.org
  • 답장용 이메일2 = %{reply_key}@inbound.thesite.org
  • 키로 관련 게시물 찾기 = 켜짐
  • 수동 폴링 = 켜짐
  • mailgun API 키 = 입력함 …하지만 이전 설치 시도에서 가져온 것이므로 문제가 될 수 있습니다
  • 설정 > 이메일 > 설정: 주소 = smtp.mailgun.org
  • 설정 > 이메일 > 설정: 포트 = 2525
  • 설정 > 이메일 > 설정: user_name = postmaster@mg.thesite.org

다음 단계로 무엇을 해야 할지 의견이 있으신가요? …그리고 미리 정말 큰 감사를 드립니다! 이전 설치 과정에서 도움을 주신 @pfaffman 님에게도 핑을 겁니다. 님의 “직관적인” 가이드도 매우 유용했습니다. 감사합니다!

메일 컨테이너와 앱 컨테이너를 모두 다시 빌드했나요? 메일 수신기에 인증서를 부여하려는 부분을 제거하는 것이 쉬운 해결책이라고 생각합니다. 해당 인증서가 사이트에서 정상적으로 작동하나요?

Discourse 사이트가 inbound.thesite.org에 있지 않다면 그것이 문제입니다. 핵심 아이디어는 Discourse 사이트와 메일 수신기의 호스트명이 동일해야 한다는 것입니다. 이를 수정하려면 여러 도메인으로 Let’s Encrypt 설정하기 문서를 찾아보셔야 합니다.

이것은 mail-receiver howto의 의도된 범위를 상당히 벗어난 내용입니다. 이 정보만으로는 해결 방향을 잡기 어렵고 예산이 있다면 편하게 저에게 연락해 주세요.

그렇다면 질문은 다음과 같이 바뀌게 됩니다. 위에서 정의한 두 가지 목표 모두를 달성할 수 있을까요(이 두 가지는 매우 흔해 보입니다)? www.thesite.org와/또는 thesite.org를 입력한 방문자를 subdomain.thesite.org로 리디렉션하는 것이 유일한 대안일까요? 만약 그렇다면, 대외용 이메일 주소를 admin@subdomain.thesite.org처럼 보기 싫은 것으로 바꿔야 할 것 같습니다.

절대적으로 필요하다고 판단되면 관리자 이메일 주소를 바꾸는 것은 감수할 수 있습니다. 뭔가 뻔한 것을 놓치고 있는 것 같은데, 아마 제가 완전히 엉뚱한 방향으로 생각하고 있는 것 같습니다(아마도 그럴 것입니다!).

메일 수신기가 디스코urs 도메인과 다른 도메인에서 메일을 수신하도록 하려면, 그렇게 할 수 있다고 생각합니다. 가장 쉬운 방법은 메일 수신기에서 Let’s Encrypt 인증서를 사용하지 않는 것입니다.

@pfaffman 정말 천재세요! 성공했어요!! :clap: :clap: :clap: 여러 도메인으로 Let’s Encrypt 설정하기 가이드를 따라 디스코스를 다시 빌드한 후 메일 리시버를 다시 빌드했는데(이 두 작업 중 하나는 불필요했을 수도 있지만), 이렇게 해결되었습니다. 성공!

오늘 저녁에 “직접 전달되는 수신 메일 설정” 원본 게시글을 구글 문서에 복사/붙여넣어서 제 수정 제안들을 공유하고 싶습니다. 여러분께 잘못이 있는 것은 아니지만, 저는 명령줄에 익숙하지 않은 사람이라 원본 게시글 중 직관적으로 이해하기 어려운 부분이 몇 있습니다. 위에서 제가 정의한 두 가지 목표는 많은 설치 환경에서 매우 일반적인 것들이라고 생각하며, 이제 최종 목표를 달성할 수 있다는 것을 알게 되었습니다.

전체 설정 튜토리얼에 대한 다른 제안들도 있습니다. 프로세스를 최대한 단순화하기 위한 수정 제안들을 계속 목록으로 작성하고 있습니다.

여기서 저를 도와주셔서 정말 감사합니다. 큰 도움이 되었습니다!