Здравствуйте. У меня есть Discourse, установленный без Docker на локальном сервере. Также установлен iRedMail. Сначала я пытался использовать SMTP-сервер от mail.ru. Тестовые письма отправлялись, как и приглашения. Однако уведомления по электронной почте не приходили, и сброс пароля не сработал. Я решил, что нужно установить локальный почтовый сервер и посмотреть логи, чтобы понять, почему письма не уходят. Я это сделал. Локальные письма между почтовыми ящиками доставляются. Этого должно быть достаточно для тестирования локального Discourse и почты. Настроил локальный SMTP-сервер. Отправил тестовое письмо… и оно дошло! Победитель (нет). Посмотрел логи почтового сервера в /var/log/mail.log.
Хорошо. Теперь отправляю приглашение на тот же ящик… Смотрю логи почтового сервера… …и ничего. Пусто. Не понимаю, в чём проблема.
Моя просьба: подскажите, как заставить Discourse общаться с Postfix.
Сейчас у меня есть активная учётная запись администратора, которую я включил вручную, потому что, как вы уже догадались, я не получил письмо с подтверждением. Готов предоставить любые файлы, такие как настройки и логи, по запросу.
Обычно при возникновении подобных проблем мы выполняем команду вроде:
sendmail -vvv A_VALID_EMAIL_ADDRESS < email.txt
Это выдаст подробный вывод о процессе рукопожатия между вами и SMTP-сервером. Как правило, такое подробное логирование предоставит вам подсказки для решения вашей проблемы.
Привет! У меня пока мало опыта. Я впервые установил Discourse и почтовый сервер. Не могли бы вы подробнее объяснить, что именно нужно сделать? Спасибо.
Сначала вам нужно временно «забыть» о Discourse и сосредоточиться на настройке SMTP-релей для почты: запустите его, протестируйте и убедитесь, что он может пересылать письма.
Я создал два почтовых ящика в моей локальной доменной зоне «@ugda.space». Сообщения между ними приходят. А вот в ящики Gmail, Mail и Yandex сообщения не доходят друг до друга. Я не настраивал это, так как думал, что для тестов будет достаточно внутренней локальной переписки.
@Anv Позвольте быть предельно откровенным: хорошее неписаное правило должно звучать примерно так: «Не проси людей говорить с тобой, если ты не готов приложить усилия, чтобы их выслушать». Под «выслушиванием» я имею в виду, что ты действительно принимаешь во внимание то, что тебе говорят. Участие в форуме, полагаю, считается «просьбой к людям поговорить с тобой», особенно если ты просишь о помощи.
Постоянное повторение одного и того же и заставление собеседника тоже повторяться ни к чему не приведут — ни для кого.
Теперь вопрос: почему ты ещё не выполнил эту команду в командной строке?
Понимаю ваше разочарование; и мне жаль, что у меня нет больше свободного времени, чтобы каждый раз разбираться со всеми проблемами вашего SMTP-релейного сервера при вашем ответе.
Похоже, что ваш SMTP-хост получает почту; но это не обязательно означает, что он будет работать как SMTP-релейный сервер.
На память приходит, что существует флаг для использования sendmail и других почтовых клиентов, чтобы проверить, работает ли SMTP-хост корректно в качестве релейного сервера. Возможно, стоит изучить опцию sendmail -G (или поискать другой способ тестирования). В целом, вам нужно отправить письмо на тестовый адрес, отличный от хоста, на котором вы работаете, используя ваш недавно настроенный SMTP-хост в качестве релейного сервера.
Немного истории
В старые времена большинство SMTP-хостов пересылали почту «из коробки»; но затем все SMTP-хосты в сети превратились в крупные рассылочные центры спама, потому что спамеры просто эксплуатировали функцию релейной пересылки (неизвестно для владельца хоста) и заваливали спамом весь мир.
Суть в том, что вам нужно проверить, может ли ваш недавно настроенный SMTP-хост пересылать почту за вас.
Вы внимательно изучили учебное пособие по настройке и посмотрели, упоминается ли там настройка SMTP-хоста в качестве релейного сервера?
Я просто думаю вслух и надеюсь, что это хоть немного поможет вам перейти к следующему этапу вашего проекта с SMTP-хостом.
Вы упомянули, что установили Discourse без Docker. Возможно ли для вас выполнить чистую установку «классическим» способом (с использованием Docker), указав email, созданный при этой новой установке? Или вы не можете запустить Docker на используемом вами компьютере?
Я пробовал использовать Docker, но письма не приходили вообще. Я даже не смог создать учётную запись администратора. Поскольку у меня не было достаточного опыта, я решил отказаться от Docker.
Наверное, это не очень поможет, но как «ещё один пример»: у меня никогда не возникало проблем с настройкой SMTP-почты в Discourse — ни при развёртывании в Docker на продакшене, ни при локальной разработке на macOS без Docker. Однако я всегда использовал сторонние SMTP-сервисы.
Ваша ситуация привлекла моё внимание, и теперь я очень заинтересован в решении этой небольшой загадки. В ближайшие несколько недель я постараюсь найти время, чтобы настроить SMTP-релей на виртуальном сервере с Ubuntu Linux и посмотреть, сможет ли Discourse работать с «классическим» SMTP-релем, не полагаясь на «сторонние решения».
Заранее извиняюсь, если мне понадобится несколько недель на сборку этой конфигурации. Я немного отстал от скучной бумажной работы, связанной с государственным документооборотом, потому что слишком увлёкся изучением разработки плагинов для Discourse и того, как Rails взаимодействует со всеми его компонентами.
После ряда проб и ошибок мне удалось настроить Discourse с Postfix. Вот шаги, которые я использовал, надеюсь, они окажутся полезными:
Настройте A-запись, указывающую на ваш новый сервер, например forum.domain.com.
Установите Postfix, настройте myhostname как forum.domain.com и добавьте 172.17.0.0/16 в mynetworks, чтобы контейнер Discourse мог взаимодействовать с Postfix без аутентификации. 172.17.0.0/16 — это сеть по умолчанию, используемая контейнерами Docker.
Убедитесь, что Postfix может отправлять письма. Я предпочитаю использовать swaks:
swaks -t your_name@gmail.com
Вы должны получить письмо с темой “This is a test mailing”.
В файле containers/app.yml убедитесь, что закомментированы три строки для DISCOURSE_SMTP_USER_NAME, DISCOURSE_SMTP_PASSWORD и DISCOURSE_SMTP_ENABLE_START_TLS.
Также установите DISCOURSE_SMTP_DOMAIN равным forum.domain.com (не забудьте заменить на ваше доменное имя).
Для тестирования подключитесь к контейнеру Discourse командой docker exec -it app bash и выполните:
Вы должны получить письмо с темой “This is a test mailing”.
Перезапустите Discourse командой ./launcher rebuild app. Теперь вы должны иметь возможность создавать новые аккаунты и получать письма с подтверждением.