Discourse를 설정하여 Mailgun에서 이메일을 받는 방법?

서버(Linode)에 Ubuntu를 실행 중인 Discourse 설치 환경(권장 방식으로 설치)이 완벽하게 작동하고 있습니다. 이메일을 보내거나 새 사용자를 등록하는 데는 문제가 없습니다.

현재 이 기능을 사용하고 있습니다: Configuring incoming email to create new topics or group messages : Discourse가 수신 이메일 주소를 제공해야 합니다.

Mailgun에서 Catch All 라우트를 생성하여 이메일을 웹훅으로 전달하도록 설정했으며, 설정 방법은 여기에 설명되어 있습니다: Discourse Mailgun Routes 플러그인도 설치해 두었습니다.

하지만 Mailgun 로그를 확인해보니 실패하고 있습니다. 어떻게 해야 할지 아이디어가 있을까요?

{
	"timestamp": 1737657789.428326,
	"recipient-domain": "forum.domain.com",
	"envelope": {
		"transport": "http",
		"targets": "https://forum.domain.com/mailgun/routes/receive_mime",
		"sender": "me@myemail.com"
	},
	"primary-dkim": "",
	"delivery-status": {
		"code": 406,
		"session-seconds": 0.277,
		"message": "Not Acceptable",
		"attempt-no": 1,
		"description": ""
	},
	"event": "failed",
	"id": "4uIIPrRRTQOwluJaE-QpRA",
	"campaigns": null,
	"log-level": "error",
	"tags": [],
	"message": {
		"size": 4089,
		"headers": {
			"message-id": "CA+riLLnyMLCruT2DmhFjTuyvy7OtQ8NrT0X0m5PZXfK3uzwCEg@mail.gmail.com",
			"to": "domain+support-12@forum.domain.com",
			"subject": "Test",
			"from": "Me Me <me@myemail.com>"
		},
		"attachments": []
	},
	"recipient": "https://forum.domain.com/mailgun/routes/receive_mime",
	"user-variables": {},
	"flags": {
		"is-test-mode": false,
		"is-authenticated": false,
		"is-routed": false,
		"is-system-test": false
	},
	"storage": {
		"region": "us-east4",
		"env": "production",
		"key": "BAABAAAVXB5iOt41fPtDZaekVDDH1beaZA",
		"url": "https://storage-us-east4.api.mailgun.net/v3/domains/forum.domain.com/messages/BAABAAAVXB5iOt41fPtDZaekVDDH1beaZA"
	},
	"severity": "permanent"
}

가장 쉽고 권장되는 방법은 자체 호스팅 사이트에서 Mail-Receiver를 사용하여 직접 전달 수신 이메일을 구성하는 것입니다.

mailgun_log_rejections를 활성화하고 다른 이메일을 보내면, sidekiq 로그에 거부 이유가 표시되어야 합니다(mailgun은 응답 본문을 저장하지 않으므로, 사실상 이것이 유일한 방법입니다). 이 정보가 원인을 파악하는 데 도움이 될 것입니다.

그렇지 않다면, 해당 방식으로 진행하기를 원하신다면 mail-receiver 설정을 사용할 수 있습니다.

안녕하세요 @Wolftallemo, 훌륭한 플러그인을 만들어 주셔서 감사합니다 :slight_smile:

/logs를 확인해 보았지만 이 문제와 관련된 내용은 보이지 않았습니다. 사이드킥(sidekiq) 로그를 읽는 데 이것이 올바른 위치인지 확실하지 않네요.

플러그인을 정상적으로 작동시키는 쪽을 선호합니다. 메일 리시버(mail-receiver)를 시도하기 전에 며칠 더 시간을 써 볼 수도 있겠네요. 제 설치 환경은 트래픽(traefik) 리버스 프록시 뒤에 있으므로, 그 쪽으로 진행하면 조금 더 어려울 것 같습니다.

감사합니다.

Dan

네, 보통은 거기에 있겠지만, 그건 좀 이례적인 경우입니다.

수신 스팸 필터부터 확인해 보세요. Mailgun 쪽에서 필터링을 꺼둔 설정일 수도 있습니다.

만약 그렇다면, 다음 중 하나를 선택할 수 있습니다:

  • Mailgun의 수신 스팸 필터링 설정을 변경하여 스팸 헤더를 추가합니다(도메인 설정에서 변경 가능합니다).
  • mailgun_spam_detection을 none으로 설정합니다(하지만 이 방법은 권장하지 않습니다).

다만, none으로 설정하는 것도 여기서는 비교적 간단한 테스트가 될 수 있겠네요.

안녕하세요,

해당 설정들은 이미 적용되어 있는 것으로 보입니다. 아마 제가 아주 어리석은 실수를 하고 있는 것 같습니다. 메일 수신기를 간단히 테스트해 보았는데, 유일한 문제는 제가 Traefik 리버스 프록시 뒤에서 실행 중이라는 것입니다. 따라서 필요한 docker compose 레이블 등을 모두 적용하여 작동하게 하려면 몇 번의 시도가 필요할 것입니다. 이 점이 바로 제가 이 플러그인을 매우 좋아한 이유입니다!

혹시 Mailgun에서 바운스(bounce)를 정상적으로 수신하고 계신가요? 로그 없이 거절되는 이유는 두 가지뿐입니다. 키를 잘못 설정한 경우(웹훅 서명 키여야 합니다)이거나, 아예 설정되어 있지 않은 경우입니다.

Discourse 내의 문구가 다소 모호해서 변경되는 것이 좋을 것 같은데, 웹훅 서명 키가 아닌 다른 키를 실수로 설정하지는 않았는지 다시 확인해 보시기 바랍니다.

메일 수신기는 포트 25에서 작동하므로 트래픽은 이를 알 필요가 없습니다.

이미 MX 레코드를 변경해 두었기 때문에, 24시간 지연을 다시 겪지 않기 위해 메일 수신기(mail-receiver) 방식으로 계속 진행할 예정입니다.

이렇게 하면 상황이 매우 단순해집니다. 이 경우, 트래픽/도커-컴포즈(traefix/docker-compose) 스택과의 통합이나 어떤 변경 사항 없이도 예제 스크립트를 거의 그대로 실행할 수 있다는 뜻인가요?