Не удается получить почту с почтового сервера

Всем добрый день,

Я столкнулся с этой проблемой, которая, как мне известно, является известной и довольно часто встречающейся. Я прочитал множество материалов и провёл много тестов, но застрял на этапе «отправка 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), сервер электронной почты перестаёт работать.

Огромное спасибо!!!

С наилучшими пожеланиями,
Чие

Обновление:

В начале я могу получать письма с темами «Поздравляем, вы установили Discourse!» и «Регистрация учетной записи администратора» при использовании конкретного внутреннего IP-адреса, когда обращаюсь с другого устройства. Однако после выполнения этих шагов возникает ошибка: страница не найдена. Почему изначально доступ по внутреннему IP-адресу был возможен, а после этой настройки исходный IP-адрес перестал работать?
Очень странно…

Проблема, похоже, решена мной самостоятельно.

Перейдите в /etc/hosts

и укажите в качестве имени хоста ваш IP-адрес.
Имя хоста также устанавливается как IP-адрес.

DISCOURSE_HOSTNAME может использовать внутренний IP-адрес.
Тогда всё заработает.

(Конечно, это только для внутреннего использования.)