Всем добрый день,
Я столкнулся с этой проблемой, которая, как мне известно, является известной и довольно часто встречающейся. Я прочитал множество материалов и провёл много тестов, но застрял на этапе «отправка email».
Я следовал инструкции по адресу discourse/docs/INSTALL-cloud.md at main · discourse/discourse · GitHub. Мои шаги были следующими:
git clone https://github.com/discourse/discourse_docker.git /var/discourse
cd /var/discourse
Перейдите в папку /samples/, скопируйте файл standalone.yml в /containers/app.yml.
Отредактируйте информацию о вашем сервере.
Далее выполните:
sudo ./discourse-doctor
Первый эксперимент
Когда в файле app.yml было установлено:
DISCOURSE_HOSTNAME: 'localhost'
И заполнены следующие параметры:
DISCOURSE_SMTP_ADDRESS: XXX
DISCOURSE_SMTP_PORT: 587
DISCOURSE_SMTP_USER_NAME: XXX
DISCOURSE_SMTP_PASSWORD: XXX
DISCOURSE_SMTP_ENABLE_START_TLS: true
Сервер электронной почты также находится во внутренней сети.
Сначала всё работало. Discourse корректно отправлял письма для регистрации, и я мог нормально заходить в админ-панель.
Однако, при установке localhost в качестве HOSTNAME, я не мог получить доступ к сайту через браузер, используя внутренний IP-адрес (например, 10.1.X.X).
Второй эксперимент
Поэтому я изменил только параметр DISCOURSE_HOSTNAME, не трогая остальные настройки в файле app.yml:
DISCOURSE_HOSTNAME: '10.1.3.91'
Примечание: 10.1.3.91 — это мой внутренний (локальный) IP-адрес.
После изменения HOSTNAME на этот адрес я смог открыть сайт в браузере. Однако сервер электронной почты перестал работать: письма от Discourse больше не приходили.
Дополнительные данные
Я также попробовал отправить письмо через Python, используя тот же SMTP.
Скрипт выглядел следующим образом:
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
import smtplib
content = MIMEMultipart()
content["subject"] = "Learn Code With Mike"
content["from"] = " (мой email) "
content["to"] = " (тестовый email) "
content.attach(MIMEText("Demo python send email"))
with smtplib.SMTP(host=" (как в DISCOURSE_SMTP_ADDRESS) ", port="587") as smtp:
try:
smtp.ehlo()
smtp.starttls()
smtp.login(" (как в DISCOURSE_SMTP_USER_NAME) ", " (как в DISCOURSE_SMTP_PASSWORD) ")
smtp.send_message(content)
print("Complete!")
except Exception as e:
print("Error message: ", e)
Этот скрипт работал корректно. Значит ли это, что данные SMTP для отправки почты верны и работают?
Есть ли у кого-нибудь идеи по решению этой проблемы?
Что касается сервера электронной почты, я также пробовал использовать Elastic Email и Mailjet, но безрезультатно.
Вывод:
Если DISCOURSE_HOSTNAME установлен как localhost, сервер электронной почты работает.
Если DISCOURSE_HOSTNAME изменён на внутренний IP-адрес (т.е. локальный IP), сервер электронной почты перестаёт работать.
Огромное спасибо!!!
С наилучшими пожеланиями,
Чие