Как настроить Discourse для получения писем от Mailgun?

У меня полностью рабочая установка Discourse (установленная по рекомендованному методу) на сервере (Linode) под управлением Ubuntu. Я могу отправлять электронную почту без проблем и создавать новых пользователей через регистрацию.

Мы используем эту функцию: 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.

Я бы предпочёл сначала заставить плагин работать, возможно, дам себе ещё пару дней, прежде чем пытаться настроить приём почты. Моя установка находится за обратным прокси Traefik, так что, уверен, это немного усложнит задачу.

С уважением,

Дэн

Да, они должны находиться именно там, хотя это необычно.

Я бы начал с проверки входящего спам-фильтра. Возможно, он настроен так, что не фильтрует сообщения на стороне Mailgun.

Если это так, я бы либо:

  • Изменил настройки входящей фильтрации спама на стороне Mailgun, чтобы добавлять заголовки спама (это находится в настройках домена);
  • Установил mailgun_spam_detection в значение none (но я не рекомендую этого делать).

Но, полагаю, установка значения none могла бы стать довольно простым тестом в данном случае.

Здравствуйте,

Похоже, эти настройки уже настроены. Вероятно, я делаю что-то очень глупое. Я быстро попробовал mail-receiver; единственная проблема в том, что я работаю за обратным прокси-сервером Traefik, поэтому, несомненно, потребуется несколько попыток, чтобы заставить это работать со всеми необходимыми метками docker compose и т. д. Именно поэтому мне так понравился ваш плагин!

Вы случайно успешно получаете отскоки от Mailgun? Единственные две причины, по которым отклонение происходит без лога, — это либо неправильный ключ (он должен быть именно ключом подписи вебхука), либо его отсутствие.Стоит перепроверить, не установили ли вы случайно что-то другое вместо ключа подписи вебхука (поскольку формулировка в Discourse несколько сомнительна и, вероятно, должна быть изменена).

Почтовый сервер работает на порту 25, поэтому Traefik не нужно знать о нём.

Я уже изменил свои MX-записи, поэтому, чтобы избежать ещё задержки в 24 часа, я продолжу использовать подход с почтовым приёмником.

Это очень сильно упрощает задачу. В таком случае я могу почти без изменений просто запустить пример скрипта, без какой-либо интеграции со стеком traefix/docker-compose?