이메일 수신 및 회신 활성화

NetCore Cloud를 이메일 제공업체로 사용하고 있는데, 이메일 수신 활성화나 이메일 회신이 불가능합니다. NetCore Cloud Email을 이용해 이를 어떻게 구현할 수 있는지 아이디어가 있으신가요?

@Abdelrahman_MoHamed와 이 작업을 함께 진행하고 있습니다. 우리가 파악한 핵심 문제/막히는 부분은 netcore를 설정하여 수신된 이메일을 Discourse로 전송하도록 구성하는 것입니다.

문제가 되는 부분은 이 수신된 이메일 데이터를 Discourse로 처리되도록 보내는 방법입니다. netcore에서 설정 화면을 보고 있는데, 어디에 해당 정보를 입력해야 하는지 모르겠습니다:

아래와 유사한 URL을 입력해야 할 것 같습니다:

https://forum.mamapedia.com/admin/email/handle_mail

하지만 웹훅 설정을 살펴보니 POST 요청으로 구성되어 있어 혼란스럽습니다.

또한, 목표를 달성하기 위해 웹훅을 사용해야 한다는 가정을 하고 있습니다.

Discourse 커뮤니티 여러분,

Discourse 인스턴스의 이메일로 답변(Reply-by-Email) 기능을 설정하는 중인데, 몇 가지 확인 사항과 조언이 필요합니다.

현재 설정 상태

• 이메일 제공업체로 Netcore를 사용하고 있습니다.

• 수신 이메일을 위해 Netcore에서 reply+*@mydiscourse.com 형식에 해당하는 모든 이메일을 캡처하는 규칙을 설정했습니다.

• Netcore는 이러한 이메일을 다음 중 하나로 전달할 수 있습니다:

  1. 다른 이메일 주소

  2. 웹훅(webhook)

시도해 본 내용

다음과 같은 Discourse 엔드포인트로 이메일을 전달하려고 시도했습니다:

https://mydiscourse.com/admin/email/handle_mail

불행히도 404 Not Found 상태가 반환되었습니다.

질문 사항

  1. 이 구성에서 수신 이메일을 처리하는 주체는 누구인가요? 이메일을 Discourse가 직접 처리해야 하는지, 아니면 이메일 제공업체가 Discourse가 처리할 수 있는 특정 형식으로 전달해야 하는지 궁금합니다.

  2. mail-receiver를 사용한 직접 이메일 수신(Direct Email Receiving)이라는 옵션을 확인했습니다. 제 설정에 대해 이것이 더 나은 접근 방식일까요?

이메일로 답변 기능이 정상적으로 작동하도록 수신 이메일이 올바르게 처리되도록 보장하고 싶습니다. Netcore를 사용하여 이를 올바르게 설정하는 방법에 대한 안내나 관련 문서 링크를 제공해 주실 수 있을까요?

미리 도움을 주셔서 감사합니다!

한 가지 참고할 점으로, netcore는 이전에 'pepipost’으로 불리던 것입니다. 혹시 이 이름이 익숙한 분이 계시다면, 올바른 방향으로 안내해 주실 수 있을지도 모릅니다.

미리 감사합니다!

가장 쉬운 방법은 Mail-Receiver를 사용하여 자체 호스팅 사이트의 직접 전달 수신 이메일 구성입니다.

사용 중인 엔드포인트는 바운스(bounce) 처리를 위한 것이지만, 제가 틀렸을 수도 있습니다.

답변해 주셔서 감사합니다. 이 설정을 사용하면 이메일 제공업체에서 데이터를 게시할 수 있는 엔드포인트를 사용할 수 있는 건가요?

@pfaffman 매우 도움이 되었습니다. 감사합니다. netcore(aka pepipost)는 일단 제쳐두고, 말씀하신 내용을 정리하면 다음과 같습니다:

  • 이메일 전송
  • 바운스 관리
  • 답장 처리

우리가 Mailgun, SendGrid 등을 사용하든 말든, 자체 호스팅 사이트의 직접 전달 수신 이메일을 Mail-Receiver로 구성해야 한다는 뜻이 맞나요? ‘가장 쉬운’ 방법이라고 하셨는데, 다른 방법도 있는지 궁금합니다.

다시 한번 답변에 감사드립니다. 이 문제로 며칠째 막혀 있었습니다…

또한, 여기 일반 커뮤니티에 게시하면서, 자체 호스팅 환경에서 완전한 이메일 처리를 위해 자체 호스팅 사이트의 직접 수신 이메일을 Mail-Receiver로 구성이 필수적인지 확인을 구합니다.

이것이 실제로 필수적이라는 것을 다른 누군가가 확인해 주시면 매우 도움이 될 것입니다.

Discourse가 폴링할 pop3 메일함을 구성하는 것도 가능합니다. 메일 수신기는 설정이 더 간편하며, 그룹 또는 카테고리 메일함에 임의의 주소를 사용할 수 있습니다.

pfaffman 님, 감사합니다. 또다시 매우 유용한 답변이었습니다. 이제 메일 수신기를 진행하려고 하는데, 멀티사이트 설치 환경입니다. 잘 마무리되면, 여기 다시 확인하겠습니다.

Hi @pfaffman , 다시 한번 도움 주셔서 감사합니다

저는 포럼을 위해 Discourse의 메일 수신기(mail-receiver) 컨테이너를 설정하려고 시도하고 있지만, 테스트 중 메일 거부와 관련된 문제를 겪고 있습니다. 문제의 세부 사항은 다음과 같습니다:

  • 포럼 도메인: test.mamapedia.com (Cloudflare를 통해 프록시됨)
  • 메일 수신기 도메인: reply.mamapedia.com
  • 오류 상세 내용:
    Telnet을 사용하여 메일 수신기를 테스트할 때 다음과 같은 오류를 받습니다:
telnet reply.mamapedia.com 25
Trying 34.122.3.90...
Connected to reply.mamapedia.com.
Escape character is '^]'.
220 ESMTP server
MAIL FROM: <abdohamoda636@gmail.com>
250 2.1.0 Ok
RCPT TO: <test@reply.mamapedia.com>
554 5.7.1 <test@reply.mamapedia.com>: Recipient address rejected: Mail to this address is not accepted. Check the address and try to send again.

메일 수신기 로그: 메일 수신기 컨테이너 로그에는 다음과 같은 거부 메시지가 표시됩니다:

Dec 17 17:19:12 test-discourse-20241125-173103-mail-receiver postfix/smtpd[139]: NOQUEUE: reject: RCPT from 90.3.122.34.bc.googleusercontent.com[34.122.3.90]: 554 5.7.1 <test@reply.mamapedia.com>: Recipient address rejected: Mail to this address is not accepted. Check the address and try to send again?; from=<abdohamoda636@gmail.com> to=<test@reply.mamapedia.com> proto=SMTP
Dec 17 17:19:12 test-discourse-20241125-173103-mail-receiver postfix/smtpd[139]: using backwards-compatible default setting smtpd_relay_before_recipient_restrictions=no to reject recipient "test@reply.mamapedia.com" from client "90.3.122.34.bc.googleusercontent.com[34.122.3.90]"

관찰 사항:

  • 로그의 오류 메시지는 수신자 주소 "test@reply.mamapedia.com"이 거부되고 있음을 나타냅니다.
  • 이 문제는 메일을 수락하는 것을 막고 있는 postfix 설정이나 어떤 종류의 제한 사항과 관련되어 있는 것으로 보입니다.

시도해 본 내용:

  1. reply.mamapedia.com의 DNS 레코드(MX)가 올바르게 설정되어 있는지 확인했습니다.
  2. 메일 수신기 컨테이너의 구성을 다시 확인하고 reply.mamapedia.com 도메인이 올바르게 설정되어 있는지 검증했습니다.

메일 수신기 설정 파일

env:
  LC_ALL: en_US.UTF-8
  LANG: en_US.UTF-8
  LANGUAGE: en_US.UTF-8

  ## Where e-mail to your forum should be sent.  In general, it's perfectly fine
  ## to use the same domain as the forum itself here.
  MAIL_DOMAIN: reply.mamapedia.com
# uncomment these (and the volume below!) to support TLS 
  POSTCONF_smtpd_tls_key_file:  /letsencrypt/reply.mamapedia.com.key
  POSTCONF_smtpd_tls_cert_file:  /letsencrypt/fullchain.cer
  POSTCONF_smtpd_tls_security_level: may


  ## The base URL for this Discourse instance.
  ## This will be whatever your Discourse site URL is. For example,
  ## https://test.mamapedia.com. If you're running a subfolder setup,
  ## be sure to account for that (ie https://example.com/forum).
  DISCOURSE_BASE_URL: 'https://test.mamapedia.com'

  ## The master API key of your Discourse forum.  You can get this from
  ## the "API" tab of your admin panel.
  DISCOURSE_API_KEY:  '#############'

  ## The username to use for processing incoming e-mail.  Unless you have
  ## renamed the `system` user, you should leave this as-is.
  DISCOURSE_API_USERNAME: system

volumes:
  - volume:
      host: /var/discourse/shared/mail-receiver/postfix-spool
      guest: /var/spool/postfix
# uncomment to support TLS
  - volume:
      host: /var/discourse/shared/standalone/letsencrypt
      guest: /letsencrypt


Cloudflare DNS 레코드

image

image

The image shows a web page with a field labeled "A," a field for entering text, an IP address, a cloud icon indicating "Proxied," and an "Auto" button, with an "Edit" button on the right. (Captioned by AI)

도와주실 수 있는 도움이나 통찰을 제공해 주시면 감사하겠습니다.

정확히는 모르겠지만, 이런 오류는 항상 DNS 문제입니다. 그리고 Cloudflare가 개입된 경우에도 마찬가지입니다. 꽤 오래전에 그 escape 오류를 겪었을 때, 서버 설정이 잘못되어 발생한 타임아웃이었어요.

텔넷을 통해 메시지를 보내려고 하면 이 메시지가 표시되지만, 일반 이메일 제공업체로 알림에 답장하는 경우에는 정상적으로 작동합니다.

이메일 답장 기능을 활성화하고 실제 환경에서 테스트해 보시길 권장합니다.

감사합니다, @Canapin. 아마도 말씀이 맞을 것 같네요. 모든 이메일에 답장을 보내 보고, 잘 되기를 바라볼게요.

업데이트를 공유하겠습니다.

도움이 된다면, 현재 정상 작동 중인 mail-receiver.yml 파일의 내용을 공유합니다.

저는 Cloudflare SSL을 사용하므로, TLS를 Cloudflare이 제공하기 때문에 모든 TLS 관련 줄을 주석 처리해 두었습니다.


## 수신 메일 리시버 컨테이너 템플릿
##
## 이 파일에 변경 사항을 적용한 후에는 반드시 다시 빌드해야 합니다.
## /var/discourse/launcher rebuild mail-receiver
##
## 편집 시 *매우* 주의하세요!
## YAML 파일은 공백 또는 정렬 오류에 대해 *매우* 민감합니다!
## 필요 시 http://www.yamllint.com/ 에서 이 파일을 검증할 수 있습니다

base_image: discourse/mail-receiver:release
update_pups: false

expose:
  - "25:25"   # SMTP

env:
  LC_ALL: en_US.UTF-8
  LANG: en_US.UTF-8
  LANGUAGE: en_US.UTF-8

  ## 포럼으로 메일을 보내야 할 도메인. 일반적으로 포럼 자체와 동일한 도메인을 사용하는 것이
  ## 전혀 문제없습니다.
  MAIL_DOMAIN: mydiscourseinstance.com
# TLS 지원을 활성화하려면 이 부분(그리고 아래 볼륨!)을 주석 해제하세요
#  POSTCONF_smtpd_tls_key_file:  /letsencrypt/discourse.example.com/discourse.example.com.key
#  POSTCONF_smtpd_tls_cert_file:  /letsencrypt/discourse.example.com/fullchain.cer
#  POSTCONF_smtpd_tls_security_level: may


  ## 이 Discourse 인스턴스의 기본 URL입니다.
  ## 이는 Discourse 사이트 URL이 됩니다. 예를 들어,
  ## https://discourse.example.com 입니다. 서브폴더 구성을 실행 중이라면,
  ## 이를 고려해야 합니다(예: https://example.com/forum).
  DISCOURSE_BASE_URL: 'https://mydiscourseinstance.com'

  ## Discourse 포럼의 마스터 API 키입니다. 이는
  ## 관리 패널의 "API" 탭에서 확인할 수 있습니다.
  DISCOURSE_API_KEY: xxxxxxxxxxxxxxxx

  ## 수신 메일을 처리하는 데 사용할 사용자 이름입니다. `system` 사용자를
  ## 이름 변경하지 않았다면, 이 값을 그대로 두어야 합니다.
  DISCOURSE_API_USERNAME: system

volumes:
  - volume:
      host: /var/discourse/shared/mail-receiver/postfix-spool
      guest: /var/spool/postfix
# TLS 지원을 활성화하려면 주석 해제
#  - volume:
#      host: /var/discourse/shared/standalone/letsencrypt
#      guest: /letsencrypt

소중한 제안과 지원에 감사드립니다! @pfaffman, @Jagster, @Canapin, @denvergeeks — 도움을 주셔서 감사합니다. 이제 문제가 해결되어 정상 작동 중이라는 소식을 전하고 싶었습니다. 기존 설정을 모두 제거하고 Docker를 최신 버전으로 업그레이드했으며, 필요한 MX 레코드가 올바르게 추가되었는지 확인했습니다. Telnet은 여전히 작동하지 않지만, 이제 응답을 성공적으로 받을 수 있습니다. 이 문제를 해결하는 데 도움을 주셔서 다시 한번 감사드립니다!

결국 작동해서 다행입니다. - postfix 설정에서 telnet 이메일을 거부하는 이유가 무엇인지 궁금합니다. (거부 이유는 여러 가지가 될 수 있지만, 제시된 이유는 맞지 않는 것 같습니다.)

맞아요. Discourse가 받아들이는 메일만 허용됩니다.