Хм. У меня такая же настройка Vultr, как у @MathiasFoster и @jryans здесь, и я столкнулся с той же проблемой (Net::OpenTimeout). Команда ufw allow https восстановила работу входящей почты.
Но теперь сайт не может отправлять письма. До настройки входящей почты исходящая почта работала нормально.
У меня нет никаких сложных настроек:
notification_email = admin@tasat.org.
Исходящая почта использует smtp.titan.email на Hostinger.
В разделе пропущенных писем я вижу: <replies+verp-14c9cc6eb915b08d4983c90c744ba4b4@forum.tasat.org>: Sender address rejected: not owned by user admin@tasat.org.
Я новичок в настройке почтовых систем. Стоит ли убрать forum. из строк в mail_receiver.yml и сделать «replies@tasat.org» псевдонимом для отправки от имени «admin@tasat.org»..?
Почтовый получатель не зависит от Discourse и отправки писем; он работает как простой почтовый сервер, настроенный исключительно на получение писем, и использует API Discourse для передачи этих писем в Discourse.
Единственное, что я могу придумать в процессе настройки, что может повлиять на отправку, — это настройка «адреса для ответа по электронной почте», хотя это должно лишь устанавливать поле Reply-To в исходящих письмах и не должно влиять на адрес отправителя.
Просто для подтверждения: похоже, что у вас в app.yml указаны (среди прочего) следующие параметры:
А в настройке «адрес для ответа по электронной почте» указано:
replies+%{reply_key}@forum.tasat.org
Правильно ли я понял?
Если да, то работают ли уведомления по электронной почте, которые не принимают ответы? Я считаю, что примером такого случая является проверка электронной почты, поэтому вы можете попробовать создать учётную запись и проверить, успешно ли будет отправлено соответствующее письмо.
При такой конфигурации для писем, которые могут принимать ответы, должно происходить следующее: отправляемое письмо использует: From: admin@tasat.org (также адрес отправителя) Reply-To: replies+abc123@forum.tasat.org
Обычно поле Reply-To не рассматривается как часть информации об отправителе; оно просто указывает адрес по умолчанию, который будет использоваться при ответе. Однако, возможно, в Hostinger к этому относятся иначе. Вы можете попробовать добавить алиас для отправки с адреса replies@forum.tasat.org.
Полагаю, Vultr (или, возможно, просто установка Docker при наличии ufw) имеет некоторые правила, которые препятствуют общению контейнеров друг с другом, из-за чего почтовый получатель не может подключиться к Discourse. Команда ufw allow https обходит эту проблему.
По умолчанию в сети только в том случае, если контейнер подключается напрямую к другому контейнеру по локальному IP-адресу, то есть по локальному IP-адресу самого контейнера.
Когда почтовый получатель выполняет поиск доменного имени вашего Discourse, он не получит этот локальный IP-адрес, поэтому ему придется покинуть свою Docker-сеть и как минимум один раз пройти через ufw, чтобы достичь Discourse.
Это отдельная ситуация, хотя и связанная. Речь идет о входящих соединениях извне, и Docker добавляет правила, разрешающие доступ к открытым портам.
Я не очень хорошо знаком с правилами цепочек netfilter/iptables, но полагаю, что вышеизложенное означает следующее:
Если соединение приходит с docker0, то есть из сети Docker по умолчанию, возврат в предыдущую цепочку (прекратить обработку правил в этой цепочке).
В противном случае, если соединение приходит из любого источника, кроме docker0, и оно является https или http, применяется DNAT, что перенаправляет его в цепочку FORWARD.
Таким образом, при конфигурации, показанной в другой теме, происходит следующее: если извне поступает трафик https или http, он перенаправляется в Docker. Однако если трафик поступает из сети Docker, он возвращается и отклоняется или отбрасывается цепочкой INPUT.
Команда ufw allow https добавляет правило в цепочку INPUT, разрешающее такой трафик. Таким образом, когда соединение возвращается в цепочку INPUT, как описано выше, оно принимается, и Docker, прослушивающий порт, получает запрос, который в конечном итоге маршрутизируется к контейнеру.
Спасибо за ответы! Я был вынужден отсутствовать некоторое время, но теперь снова возвращаюсь к этой теме…
Да, именно так у меня настроено в данный момент.
Когда я сейчас пытаюсь создать учётную запись, кнопка отправки ничего не делает. Будто она знает, что это не сработает. (И ничего не появляется в разделе «Пропущено» или где-либо ещё.)
Редактирование: Я установил «replies@tasat.org» как псевдоним для отправки для адреса admin@tasat.org и подтвердил, что он работает как для отправки, так и для получения. Я также подтвердил доставку письма, отправленного из внешнего почтового клиента и адресованного на replies+verp-174bc7d8411bc4ec2cfa84c55bd31425@forum.tasat.org.
В попытке попробовать что-нибудь я изменил «адрес для ответов по электронной почте»:
с replies+%{reply_key}@forum.tasat.org
на replies+%{reply_key}@tasat.org.
Но это не изменило результатов.
Письмо не доходит до mail-tester. Все попытки исходящей отправки заканчиваются в разделе «Пропущено» с различными вариантами этого сообщения:
553 5.7.1 <replies+verp-8c79cd4e83023bda6df0624c2cacd36e@tasat.org>:
Адрес отправителя отклонён: не принадлежит пользователю admin@tasat.org
Возможно, это интересно? Когда я запускаю discourse-doctor, исходящая почта не отправляется со следующим сообщением:
==================== ТЕСТ ПОЧТЫ ====================
Для надёжного теста получите адрес на http://www.mail-tester.com/
Отправка письма на ССКРЫТО . .
Проверка отправки на admin@tasat.org через smtp.titan.email:587,
имя пользователя: admin@tasat.org с обычной аутентификацией.
Соединение с SMTP-сервером успешно.
Отправка на admin@tasat.org . . .
Письмо не было отправлено.
Причина: 553 5.7.1 <replies+verp-3cc19f7b135e6f56219e030999db9e29@tasat.org>:
Адрес отправителя отклонён: не принадлежит пользователю admin@tasat.org
Отправка напрямую на адрес replies+ (или на адрес forum.tasat.org) из почтового клиента работает — она следует псевдониму «replies» и попадает во входящие администратора. Откуда же происходит отклонение?
Я посмотрел раздел статьи «Предотвращение вмешательства исходящей почты хостинга». У меня нет пути /etc/postfix, но вот вывод netstat:
ВАЖНОЕ РЕДАКТИРОВАНИЕ – Сегодня вечером я получил ответ от поддержки Titan: «Адрес в поле Reply-To и адрес отправителя должны совпадать, иначе письмо не будет отправлено». Похоже, все мои попытки устранения неполадок были напрасны, и мне придётся искать нового поставщика электронной почты, который не накладывает такого требования.
В следующей теме (ссылка находится в конце этого документа) также содержится информация об обработке отказов для этих и других служб:
Я сам использую тариф Flex от Mailgun (полностью в рамках бесплатного лимита), но знаю, что у многих возникала путаница с их ценообразованием, и, возможно, для новых пользователей условия изменились с момента моего присоединения. Последнее, что я видел (не знаю, актуально ли это до сих пор), — можно было перейти на тариф Flex после окончания пробного периода, но это было невероятно запутанно.
Вы можете перейти на Mailgun Flex, хотя они затрудняют поиск этой информации. Примерно раз в месяц я пишу им письмо с вопросом, почему так сложно это найти.
@Simon_Manning и @pfaffman — ещё раз спасибо за советы и подсказки, они помогли мне встать на правильный путь.
Я решил попробовать MailerSend, так как их текущий бесплатный тариф довольно щедрый. Он должен подойти для нашей некоммерческой инициативы на какое-то время. Пока всё работает отлично