Можно получать электронную почту в mail-receiver, но не в Discourse?

Это для первоначальной установки, и я отнюдь не гуру DNS! Вот где я сейчас нахожусь:

  • Тесты исходящей почты работают отлично. Я использую MailGun с их рекомендуемым поддоменом «mg». Отправка осуществляется через порт 2525. В соответствующем поле настроек я указал API-ключ MailGun для вебхуков (у них ТРИ API-ключа — это правильный ли?). Также в настройках DNS прописаны MX-записи для поддомена mg. Проверка валидации в MailGun говорит, что всё работает корректно, то же самое показывает mail-tester.com.
  • Входящая почта настроена через поддомен «inbound». Если отправить письмо с аккаунта Gmail на адрес fake@inbound.[mydomain].org, я вижу, что оно появляется в логе mail-receiver. Однако если отправить тестовое письмо с самого Discourse на тот же адрес через Настройки > Почта, письмо, кажется, исчезает — в корзине отклонённых писем ничего не появляется. Для остального я использую простую прямую доставку входящей почты.

Из-за других ошибок, допущенных мной же в процессе настройки, я решил начать с чистого листа: удалил свой дроплет, переустановил Discourse и начинаю всё заново. Однако я не удалял аккаунт MailGun и фактически использую тот же самый вебхук API, что и раньше. Может ли это быть проблемой? Я действительно использую новый API-ключ, сгенерированный Discourse (старый, очевидно, исчез вместе с удалением дроплета).

Единственное ещё, что приходит в голову, — это конечная точка в файле mail-receiver.yml. У меня она выглядит так: DISCOURSE_MAIL_ENDPOINT: 'https://inbound.[mydomain].org/admin/email/handle_mail'.

Есть ли у кого-нибудь идеи, где может быть загвоздка? (Как вишенка на торте: всё это у меня уже работало совсем недавно — до того, как я удалил дроплет. Видимо, я учусь медленно :stuck_out_tongue_winking_eye:). Спасибо всем!

Это должен быть домен вашего форума, а не домен электронной почты. Можете ли вы подтвердить, что ваш форум не находится по адресу inbound.[mydomain].org? Например, если бы meta использовала этот метод, URL выглядел бы так:

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

Кроме того, это не имеет никакого отношения к Mailgun, за исключением того, что нужно игнорировать инструкции Mailgun о добавлении MX-записей для домена. Как указано:

Примечание: провайдеры исходящей почты, такие как Mailgun, могут просить вас добавить MX-записи, указывающие на их серверы. Вам следует удалить их, чтобы MX-записи вашего форума указывали только на доменное имя вашего форума. Записи SPF и DKIM по-прежнему должны указывать на серверы вашего провайдера исходящей почты, чтобы вы могли отправлять электронную почту.

@tobiaseigen Становится ближе! Я внес изменения, исключив поддомен входящей почты из конечной точки. Сохранил, затем перезапустил почтовый получатель (потому что не знаю, что делаю!). Протестировал. Не получилось. Затем выполнил полную пересборку приложения. Затем создал две новые учетные записи, используя разные адреса электронной почты. После этого я использовал учетную запись администратора, чтобы отправить личное сообщение одной из них. Это сгенерировало электронное письмо, как и ожидалось. Затем я ответил на это личное сообщение через электронную почту. Вот результат в логе почты:

<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)

Действительно, мы приближаемся к решению! Не уверен, в чем именно заключается временная ошибка? Прошло уже 13 минут, но письмо до сих пор не доставлено в Discourse. Странно.

Хочу отметить, что я создал поддомен «inbound», потому что хочу, чтобы адрес электронной почты admin@[mydomain].org обрабатывался другим почтовым хостом.

У меня возникли небольшие трудности с пониманием вашего подхода к использованию доменных имен. На моем сайте DISCOURSE_MAIL_ENDPOINT и MX-запись для входящей почты относятся к одному и тому же домену, указывающему на сервер Discourse, как объясняется в первом посте по ссылке Configure direct-delivery incoming email for self-hosted sites with Mail-Receiver. Похоже, вы пытаетесь использовать разные домены.

Как правило, рекомендуется использовать поддомен типа forum.mydomain.org для вашего форума Discourse, чтобы отделить его от основного веб-сайта и почты на 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 запускает форум (без поддомена).

В настоящее время мои настройки DNS в Namecheap выглядят следующим образом (TTL = Auto, Priority = 10):

1   A Record   @                  (IP address)     
2   A Record  inbound.            (IP Address)    
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 без изменений (не удалял символ “#”).

Другие настройки:

  • через командную строку изменил hostname на inbound.thesite.org
  • контактный email = admin@thesite.org
  • email для уведомлений = noreply@mg.thesite.org
  • email для ответов 1 = replies+%{reply_key}@inbound.thesite.org
  • email для ответов 2 = %{reply_key}@inbound.thesite.org
  • поиск связанного поста по ключу = ВКЛ
  • ручная проверка = ВКЛ
  • API-ключ Mailgun = ВВЕДЕН …но это может быть проблемой, так как он взят из предыдущей попытки установки
  • Настройки > Электронная почта > Настройки: Адрес = smtp.mailgun.org
  • Настройки > Электронная почта > Настройки: Порт = 2525
  • Настройки > Электронная почта > Настройки: user_name = postmaster@mg.thesite.org

Есть ли у вас идеи, как двигаться дальше? …и огромное СПАСИБО заранее! Также обращаюсь к @pfaffman, так как он тоже очень любезно помогал мне в прошлых трудностях, связанных с настройкой. Ваш гид “Straightforward” также оказался крайне полезным. До встречи!

Пересобрали ли вы контейнеры mail и app? Я думаю, что простое решение — удалить настройки, которые пытаются выдать сертификат для получателя почты. Работает ли сертификат для сайта?

Если сайт Discourse находится не по адресу inbound.thesite.org, то это и есть проблема. Суть в том, что имя хоста как сайта Discourse, так и получателя почты должно быть одинаковым. Вам нужно ознакомиться с инструкцией Настройка Let’s Encrypt для нескольких доменов, чтобы исправить это.

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

Итак, возникает вопрос: можно ли добиться обоих вышеуказанных целей (они кажутся невероятно распространёнными)? Является ли единственным обходным путём перенаправление в настройках DNS посетителей, которые вводят www.thesite.org и/или thesite.org, на subdomain.thesite.org? Если это так, то мне придётся смириться с изменением внешнего адреса электронной почты на что-то неуклюжее вроде admin@subdomain.thesite.org.

Я могу смириться с изменением адреса электронной почты администратора, если это абсолютно необходимо. Кажется, что мы упускаем что-то очевидное, но, возможно, я не в теме (скорее всего, так и есть!).

Если ваша цель — чтобы почтовый получатель получал письма на домене, отличном от вашего домена Discourse, то это возможно. Самый простой способ — не использовать сертификат Let’s Encrypt в почтовом получателе.

@pfaffman, вы гений! Сработало!! :clap: :clap: :clap: Следуя руководству «Настройка Let’s Encrypt для нескольких доменов», пересборка Discourse, за которой последовала пересборка mail-receiver (вероятно, одна из этих операций была излишней), решила проблему. Вот и всё!

Позже сегодня я планирую скопировать тему «Простая прямая доставка входящей почты» в Google Документ и предложить свои правки. Ни в коем случае не претендуя на критику, некоторые части темы неочевидны для таких людей, как я, которые не знают и не понимают работу с командной строкой. Я считаю, что две цели, которые я определил выше, очень типичны для многих установок, и теперь я знаю, что конечную цель можно достичь.

У меня есть и другие предложения по всему руководству по настройке. У меня есть список предлагаемых правок, чтобы сделать процесс максимально простым.

Огромное спасибо за помощь! Очень ценю!