Электронная почта вообще не работает

Здравствуйте. Уже несколько дней я пытаюсь настроить форум Discourse, и все проблемы связаны с электронной почтой. Мне удалось запустить форум, пропустив настройку регистрации по email, но мне всё ещё нужно, чтобы эта функция работала, чтобы пользователи могли регистрироваться. Я получаю одни и те же результаты снова и снова, перепробовал множество вариантов, но ничего не помогает. Каждый раз происходит одно из двух:

  1. При тестовой отправке письма появляется ошибка: «hostname . . . does not match the server certificate» (имя хоста не соответствует сертификату сервера).
  2. При тестовой отправке появляется ошибка «502», а в логах Sidekiq возникает ошибка Jobs::HandledExceptionWrapper: Wrapped Net::ReadTimeout: Net::ReadTimeout with #<TCPSocket:(closed)>.

Итак, когда появляется каждая из них? Первая ошибка возникает в каждом сценарии. Вторая же появляется, когда я использую порт 465. Процесс «отправки тестового письма» занимает некоторое время, после чего возникает эта ошибка. Только что я отключил SSL, поэтому порт 587 стал доступен, но вместо ошибок 1 или 2 процесс просто зависает на статусе «Sending test Email».

Я не знаю, что делать дальше. Я борюсь с этой проблемой уже несколько дней и до сих пор не нашёл решения. Любая помощь будет очень кстати. Спасибо за ваше время и поддержку.

ОБНОВЛЕНИЕ: С помощью команды curl --ssl-reqd я протестировал порты 465, 587, 25 и 2525. Результаты следующие:
25: Не работает (ошибка Curl 35, неверный номер версии)
465: Работает как положено, быстрая отправка письма
587: Не работает (ошибка Curl 35, неверный номер версии)
2525: Не выдаёт ошибку, но письмо так и не отправляется (таймер идёт бесконечно, письмо не отправлено)

Если это поможет, вот мои текущие настройки (с ошибкой 502):

  DISCOURSE_SMTP_ADDRESS: CENSORED
  DISCOURSE_SMTP_PORT: 465
  DISCOURSE_SMTP_USER_NAME: CENSORED
  DISCOURSE_SMTP_PASSWORD: CENSORED
  # DISCOURSE_SMTP_ENABLE_START_TLS: true           # (опционально, по умолчанию true)

Шаблон конфигурации:

templates:
  - "templates/postgres.template.yml"
  - "templates/redis.template.yml"
  - "templates/web.template.yml"
  - "templates/web.ratelimited.template.yml"
## Раскомментируйте эти две строки, если хотите добавить Lets Encrypt (https)
  - "templates/web.ssl.template.yml"
  - "templates/web.letsencrypt.ssl.template.yml"

И маппинг портов (expose):

expose:
  - "80:80"   # http
  - "443:443" # https

Вот изображение с информацией об электронной почте:

Вы используете одного из рекомендуемых поставщиков электронной почты?

Где установлен сервер Discourse?

Я так не думаю. Электронная почта предоставляется VoltHosting, если это поможет.

Кроме того, сервер Discourse установлен в директории var/discourse, и он работает (я могу зайти на сайт и перемещаться по нему с помощью учётной записи администратора, созданной мной (путём пропуска проверки электронной почты). Именно так я и тестирую электронную почту (пытаясь отправить тестовые письма через разделы «Электронная почта» > «Настройки» и «Электронная почта» > «Предварительный просмотр сводки», где я и получаю эти ошибки). Тем не менее, спасибо за помощь.

Попробуйте использовать одного из рекомендованных провайдеров — это поможет быстро определить, проблема в установке Discourse или в почтовом сервере, с которым вы пытаетесь взаимодействовать.

Список рекомендованных провайдеров существует потому, что они проверены на совместимость с Discourse. Настройка SMTP может быть сложной даже в идеальных условиях, и считается, что если вы не используете рекомендованную конфигурацию, то вы берёте на себя дополнительные технические сложности.

Спасибо за ответ. Я думаю, что не смогу воспользоваться одним из рекомендованных провайдеров, так как человек, составивший этот план, также использует эту компанию для других своих email-адресов, и это повлечёт за собой дополнительные расходы сверх стоимости самого VPS. На данный момент я не считаю это возможным. Возможно, есть другой способ более эффективно тестировать почтовые сервисы, не пересобирая форум каждый раз? Спасибо за вашу помощь.

Вам не нужно пересобирать приложение, чтобы изменить настройки электронной почты. Вы можете выполнить:

./launcher destroy app
./launcher start app

После редактирования настроек электронной почты новые параметры будут применены. То же самое касается всех переменных окружения.

Если сертификат сервера не совпадает с именем хоста, обратитесь в службу поддержки VoltHosting — это не проблема Discourse, и её должны устранить они. Возможно, существует альтернативное имя хоста, которое также является допустимым.

В любом случае рекомендуется воспользоваться одним из бесплатных пробных периодов, упомянутых на странице по ссылке выше, чтобы убедиться, что сам Discourse корректно обрабатывает электронную почту. После подтверждения работоспособности Discourse вы всегда сможете вернуться к SMTP-серверу VoltHosting.

Только для проверки: установка экземпляра выполнялась согласно этому руководству, верно?

Спасибо. Я обязательно воспользуюсь этим в будущем, но я всё ещё ищу возможное решение. Если это поможет, вот скриншот ошибки Sidekiq:

image

Конечно, я мог бы воспользоваться бесплатными пробными периодами, но в конце концов это именно пробный период, и у него есть некоторые ограничения. Да, я следовал официальному руководству по установке форума Discourse. Он запущен и работает, но электронная почта просто не функционирует. Спасибо за помощь.

На данном этапе у вас есть два варианта: протестировать с использованием рекомендованного провайдера или связаться с VoltHosting. Ошибки указывают на то, что сертификат, представленный SMTP-сервером, не действителен для имени хоста, используемого для подключения.

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

Ошибка тайм-аута указывает на то, что вы не можете подключиться к вашему почтовому серверу. Либо Digital Ocean блокирует доступ, либо это делает что-то другое.

Вы должны иметь возможность выполнить:

telnet server.hostname server-port

Вам, скорее всего, потребуется помощь от человека, который настроил или управляет почтовым сервером.

Спасибо за ответ. Я только что выполнил команду. Вот результаты:


Не уверен, должно ли это разрешать AUTH LOGIN или нет. Если должно, то, вероятно, проблема именно в этом, верно? Спасибо за помощь.

Хм. Ну, проблема была не на уровне сервера. Моя следующая догадка — проблема с сетью Docker. Но это может быть что-то другое.

Спасибо за ответ. Если это возможно, как мне провести дальнейшее расследование этой проблемы? Есть ли команда Docker, которую я мог бы запустить для тестирования и просмотра вывода, или что-то ещё? Есть ли способ протестировать это где-нибудь, чтобы получить вывод о проблеме? Если нет, то это тоже понятно. Спасибо за помощь.

ОБНОВЛЕНИЕ: Используя команду curl --ssl-reqd, я протестировал порты 465, 587, 25 и 2525. Результаты следующие:
25: Не работает (ошибка Curl 35, неверный номер версии)
465: Работает как положено, быстрая отправка писем
587: Не работает (ошибка Curl 35, неверный номер версии)
2525: Не завершилось ошибкой, но письмо так и не было отправлено (время шло, но отправка не останавливалась, и письмо не было отправлено)

Если это поможет, мои текущие настройки (с ошибкой 502):

  DISCOURSE_SMTP_ADDRESS: CENSORED
  DISCOURSE_SMTP_PORT: 465
  DISCOURSE_SMTP_USER_NAME: CENSORED
  DISCOURSE_SMTP_PASSWORD: CENSORED
  # DISCOURSE_SMTP_ENABLE_START_TLS: true           # (опционально, по умолчанию true)

Шаблоны:

templates:
  - "templates/postgres.template.yml"
  - "templates/redis.template.yml"
  - "templates/web.template.yml"
  - "templates/web.ratelimited.template.yml"
## Раскомментируйте эти две строки, если хотите добавить Lets Encrypt (https)
  - "templates/web.ssl.template.yml"
  - "templates/web.letsencrypt.ssl.template.yml"

И параметры expose:

expose:
  - "80:80"   # http
  - "443:443" # https

Ниже приведено изображение с информацией об электронной почте:


Не уверен, связано ли это с тем, что Discourse не подключается через SSL/TLS, или с чем-то другим. Надеюсь, эта информация окажется полезной и поможет решить проблему.

Добавьте это и посмотрите, поможет ли это.

DISCOURSE_SMTP_ENABLE_START_TLS: False

Спасибо за ответ. К сожалению, это не помогло. Я всё ещё получаю ту же ошибку 502.

Не уверен, поможет ли это, но я смог выполнить команду curl --ssl-reqd с VPS и успешно отправил письмо (об этом я упомянул в этом ответе). Более того, я запустил эту команду внутри приложения (запустив ./launcher enter app), и она сработала, показав те же результаты, что и в предыдущем тесте (порт 465 работает, 25 и 587 — нет, а 2525 выдаёт ошибку тайм-аута). Тем не менее, при запуске на самом форуме (с использованием тестовых писем) я всё ещё получаю ошибку 502. Надеюсь, эта дополнительная информация поможет. Спасибо за вашу помощь.

Вы нашли решение?