Похоже, что при ручном выполнении подключение к серверу устанавливается, и тестовое письмо отправляется корректно:
> sudo ./launcher enter app
root@support-app:/var/www/discourse# openssl s_client -connect mail.xxxxxxxx.com:465
:
:
огромное количество лишних данных
:
:
220 xxxxxxx.com Anti-spam GT for Coremail System (mispb-6da2110f-64b0-4d67-acf1-2d302bd594f9-xxxxxxx.com[20220915])
EHLO mail.xxxxxxxxx.com
250-mail
250-PIPELINING
250-AUTH LOGIN PLAIN
250-AUTH=LOGIN PLAIN
250-coremail 1Uxr2xKj7kG0xkI17xGrUDI0s8FY2U3Uj8Cz28x1UUUUU7Ic2I0Y2UrpDiNKUCa0xDrUUUUj
250-STARTTLS
250-SMTPUTF8
250 8BITMIME
AUTH PLAIN xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
235 Authentication successful
mail from: <xxx@xxxxxx.com>
250 Mail OK
rcpt to: <xxxx@xxxxxxx.com>
250 Mail OK
data
354 End data with <CR><LF>.<CR><LF>
content
.
250 Mail OK queued as AQAAfwBXr9nSGHdj3hEgAA--.7073S2
Скорее всего, исходящий порт заблокирован вашим хостинг-провайдером. Если вы используете такой сервис, как Mailgun (или любой другой), то порт 2525 должен работать. Если же это ваш собственный почтовый сервер, вы можете настроить его на прослушивание другого порта (например, 2525).
Или (вероятно, самый сложный вариант) вы можете открыть тикет у провайдера, который размещает ваш сервер, и попросить его открыть порт.
Что ж, учитывая, что я могу выполнить ./launcher enter app, а затем подключиться к почтовому серверу через openssl, войти по SMTP и успешно отправить письмо из контейнера Discourse, я сомневаюсь, что проблема в неработающем порте…
Я проанализировал код, и похоже, что команда EHLO даже не была отправлена. Сервер SMTP подключается, но, судя по всему, отсутствует рукопожатие SSL, из-за чего сервер разрывает соединение, а Discourse не получает никакого ответа, что и вызывает ошибку.
Поэтому я предположил, что в поддержке порта 465 есть ошибка (он по умолчанию использует SSL, но, похоже, Discourse этого не распознаёт), из-за чего SSL-соединение никогда не устанавливается.
Переключение на порт 25, по крайней мере, устраняет ошибку, хотя письма, которые я отправляю, всё ещё не приходят…
EDIT: Я могу подтвердить, что порт 25 работает корректно (порт 587 тоже должен работать, но, к сожалению, мой SMTP-сервер не предоставляет доступ к порту 587).
Ранее письма не приходили из-за того, что IP-адрес сервера Discourse был временно заблокирован SMTP-сервером из-за слишком большого количества неудачных попыток подключения.
Я также видел довольно много тем о «проблеме 465». Однако моя отладка почты, кроме очевидных случаев, не очень сильна, поэтому я цитирую руководство по устранению неполадок:
Есть ли что-то, что мы можем добавить к этому, чтобы помочь людям?
РЕДАКТИРОВАНИЕ: @RGJ Я могу подтвердить, что DISCOURSE_SMTP_FORCE_TLS: true в app.yml успешно решает проблему!
Я предлагаю добавить заметное предупреждение: Если вы используете порт 465, установите DISCOURSE_SMTP_FORCE_TLS: true, или разве Discourse не должен быть достаточно умным, чтобы определить это самостоятельно?