Настройка почтового ящика поддержки

Привет всем! Я только что наткнулся на эту запись в блоге How Does Team Discourse Use Discourse?, и вот что меня особенно заинтересовало:

Любой может написать на team@discourse.org, и мы обрабатываем такие обращения в центральной почтовой ящик Discourse как личные сообщения группы.

Как вы это настроили? Мне бы очень хотелось сделать то же самое для steering@somervilleyimby.org (сейчас мы используем Google Groups, и это довольно неудобно). Я использую Google Apps для электронной почты, получаемой и отправляемой с somervilleyimby.org, а также Mailgun для обработки писем Discourse (например, jeff@somervilleyimby.org; они отправляются и получаются через discourse.somervilleyimby.org), поэтому я немного запутался, как это можно реализовать.

Есть ли какие-то советы или, возможно, инструкция? Я заметил Configuring incoming email to create new topics or group messages, но это помогает лишь частично.

Привет! Ты видел Discourse as a private email support portal

Отлично, отлично! Это хорошая статья, но в ней не проясняется тот важный элемент, которого мне не хватает:

Как сделать так, чтобы адрес steering@somervilleyimby.org попадал в Группу в нашем Discourse?

В настоящее время домен somervilleyimby.org привязан к почтовому сервису Google Apps, и у нас есть два адреса:

Входящая и исходящая почта нашего Discourse проходит через домен discourse.somervilleyimby.org с использованием Mailgun и настроена корректно.

Но как мне сопоставить адрес электронной почты на основном домене с Группой внутри Discourse?

Я понимаю, что это, возможно, выходит за рамки самого Discourse, но подумал, что кто-то может знать решение. И я подозреваю, что существуют индивидуальные адреса person@discourse.org, а также общий адрес team@discourse.org, который попадает в инстанс команды Team Discourse.

Сработает ли перенаправление письма на someaddress@discourse.somervilleyimby.org?

Я об этом подумал, но всё ещё пытаюсь понять, как именно я это подключу :thinking:

Привет, Джефф :slightly_smiling_face:

Не совсем уверен, что правильно понял тебя, но на своём самодостаточном сайте я использую mail-receiver для обработки входящих писем, включаю возможность отправки писем в настройках администратора, а затем указываю адрес электронной почты в настройках группы или категории, куда должно попадать сообщение.

Кажется ли это тебе полезным?

Проблема почтового получателя в том, что он работает только с одним доменом.

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

Значит, ему нужно настроить почтовый приемник на другом поддомене, а затем пересылать почту с реального домена на домен Discourse. (Это следует вынести в отдельную тему)

Спасибо всем, и спасибо за то, что вынесли это в отдельную тему.

@JammyDodger, это определенно звучит как решение, а @pfaffman, похоже, точно угадал, как мне настроить свой домен и поддомен.

Если кому интересно: поддомен — это то, что Mailgun рекомендует как лучшую практику, если у вас уже есть почта на домене, управляемая другой организацией (в нашем случае — Google Apps).

tl;dr: Электронная почта остаётся очень сложной задачей.

Итак, я понял, что могу использовать правила маршрутизации Gmail для перенаправления писем на steering@discourse.somervilleyimby.org, а Mailgun затем отправляет POST-запрос на конечную точку моего плагина Mailgun — /mailgun/incoming. Но они возвращают ошибки 422 Unprocessable Entity :thinking:

Похоже, придётся немного погрузиться в код плагина…

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

Так что я использую для этого Mailgun, что, конечно, всё усложняет. Но на самом деле я не хочу заниматься собственной рассылкой, так как администрирую всё в одиночку.

Тем не менее, вы указали мне верное направление!

/me вздыхает

Конечно, всё это, вероятно, было бы гораздо менее запутанным, если бы обновление до Discourse 3.x не сломало полностью входящую почту через плагин Mailgun :disappointed:

Ошибка, которую я вижу

Из логов:

# env tab
hostname	discourse-app
process_id	9406
application_version	3030a538192252c9d29e4fb763d31810327f370a
HTTP_HOST	discourse.somervilleyimby.org
REQUEST_URI	/mailgun/incoming
REQUEST_METHOD	POST
HTTP_USER_AGENT	Go-http-client/2.0
HTTP_ACCEPT	*/*
HTTP_X_FORWARDED_FOR	<redacted>
HTTP_X_REAL_IP	<redacted>
time	14:59
# info
Сообщение (27 дубликатов)

ActionController::InvalidAuthenticityToken (Не удалось проверить подлинность CSRF-токена.)
lib/middleware/omniauth_bypass_middleware.rb:74:in `call'
lib/content_security_policy/middleware.rb:12:in `call'
lib/middleware/anonymous_cache.rb:366:in `call'
config/initializers/100-quiet_logger.rb:20:in `call'
config/initializers/100-silence_logger.rb:29:in `call'
lib/middleware/enforce_hostname.rb:24:in `call'
lib/middleware/request_tracker.rb:228:in `call'

Backtrace

actionpack (7.0.3.1) lib/action_controller/metal/request_forgery_protection.rb:251:in `handle_unverified_request'
actionpack (7.0.3.1) lib/action_controller/metal/request_forgery_protection.rb:284:in `handle_unverified_request'
actionpack (7.0.3.1) lib/action_controller/metal/request_forgery_protection.rb:273:in `verify_authenticity_token'
activesupport (7.0.3.1) lib/active_support/callbacks.rb:400:in `block in make_lambda'
activesupport (7.0.3.1) lib/active_support/callbacks.rb:199:in `block (2 levels) in halting'
actionpack (7.0.3.1) lib/abstract_controller/callbacks.rb:34:in `block (2 levels) in <module:Callbacks>'
activesupport (7.0.3.1) lib/active_support/callbacks.rb:200:in `block in halting'
activesupport (7.0.3.1) lib/active_support/callbacks.rb:595:in `block in invoke_before'
activesupport (7.0.3.1) lib/active_support/callbacks.rb:595:in `each'
activesupport (7.0.3.1) lib/active_support/callbacks.rb:595:in `invoke_before'

Env

HTTP HOSTS: discourse.somervilleyimby.org
# backtrace
Сообщение (26 дубликатов)

ActionController::InvalidAuthenticityToken (Не удалось проверить подлинность CSRF-токена.)
lib/middleware/omniauth_bypass_middleware.rb:74:in `call'
lib/content_security_policy/middleware.rb:12:in `call'
lib/middleware/anonymous_cache.rb:366:in `call'
config/initializers/100-quiet_logger.rb:20:in `call'
config/initializers/100-silence_logger.rb:29:in `call'
lib/middleware/enforce_hostname.rb:24:in `call'
lib/middleware/request_tracker.rb:228:in `call'

Backtrace

actionpack (7.0.3.1) lib/action_controller/metal/request_forgery_protection.rb:251:in `handle_unverified_request'
actionpack (7.0.3.1) lib/action_controller/metal/request_forgery_protection.rb:284:in `handle_unverified_request'
actionpack (7.0.3.1) lib/action_controller/metal/request_forgery_protection.rb:273:in `verify_authenticity_token'
activesupport (7.0.3.1) lib/active_support/callbacks.rb:400:in `block in make_lambda'
activesupport (7.0.3.1) lib/active_support/callbacks.rb:199:in `block (2 levels) in halting'
actionpack (7.0.3.1) lib/abstract_controller/callbacks.rb:34:in `block (2 levels) in <module:Callbacks>'
activesupport (7.0.3.1) lib/active_support/callbacks.rb:200:in `block in halting'
activesupport (7.0.3.1) lib/active_support/callbacks.rb:595:in `block in invoke_before'
activesupport (7.0.3.1) lib/active_support/callbacks.rb:595:in `each'
activesupport (7.0.3.1) lib/active_support/callbacks.rb:595:in `invoke_before'

Env

HTTP HOSTS: discourse.somervilleyimby.org

Пойду посмотрю, есть ли другие сообщения о подобных проблемах, но если у кого-то из вас есть идеи — буду рад выслушать!

Понял! Отлично, значит, сначала помехой стало обновление до Discourse v3.x и устаревший плагин Mailgun.

В любом случае, как это сделать:

  1. Настройте маршрут входящей почты Mailgun для адреса или регулярного выражения, предназначенного для получения входящих писем.
  2. Перейдите в Google Admin.
  3. В левом меню раскройте раздел «Приложения», затем «Google Workspace» и нажмите «Gmail» (эта ссылка может сработать?).
  4. Нажмите «Маршрутизация по умолчанию».
  5. Создайте маршрут, который сопоставляет адрес или шаблон на вашем основном домене с вашим поддоменом, работающим через Mailgun: