В тексте ниже замените <DOT> на . — так как я новый пользователь, Discourse не позволяет мне публиковать ссылки.
Я установил Discourse на только что созданный сервер в облаке Hetzner. URL-адрес корректно разрешается: forum<DOT>thewizardofosc<DOT>com.
Однако письмо, на которое я зарегистрировался, так и не было отправлено. В файле лога сообщение от Discourse гласит: Net::ReadTimeout. Это что-то значит?
telnet подключается — команда "telnet mail<DOT>thewizardofosc<DOT>com 465" возвращает "Connected to thewizardofosc<DOT>com".
Ниже приведены, как я полагаю, соответствующие фрагменты моего файла app.yml:
## при первой регистрации, например 'user1@example.com,user2@example.com'
DISCOURSE_DEVELOPER_EMAILS: 'iliasb@thewizardofosc<DOT>com'
## TODO: SMTP-сервер, используемый для подтверждения новых аккаунтов и отправки уведомлений
# Для работы требуются SMTP-адрес, имя пользователя и пароль
# ВНИМАНИЕ: символ '#' в пароле SMTP может вызвать проблемы!
DISCOURSE_SMTP_ADDRESS: mail<DOT>thewizardofosc<DOT>com
DISCOURSE_SMTP_PORT: 465
DISCOURSE_SMTP_USER_NAME: discourse@thewizardofosc<DOT>com
DISCOURSE_SMTP_PASSWORD: <PASSWORD>
#DISCOURSE_SMTP_ENABLE_START_TLS: true # (опционально, по умолчанию true)
## Если вы добавили шаблон Lets Encrypt, раскомментируйте строку ниже, чтобы получить бесплатный SSL-сертификат
LETSENCRYPT_ACCOUNT_EMAIL: me@example<DOT>com
К сожалению, безрезультатно. Запуск команды discourse-doctor выдаёт тот же результат: Net::ReadTimeout, который я также вижу в логе shared/standalone/log/rails/production.log.
Странно. Если вы можете подключиться извне контейнера, попробуйте выполнить эту команду curl внутри контейнера. Единственное предположение — у вас проблема с сетью Docker.
Да, это было маловероятно… Извините, что потратил ваше время на это!
Моя единственная другая «безумная идея» на данный момент — проверить, сможете ли вы зайти на свой почтовый сервер (какой бы он ни был) и установить порт 587 (многие SMTP-провайдеры предлагают выбор), и снова «бросить кости» с DISCOURSE_SMTP_ENABLE_START_TLS: true, разумеется.
Честно говоря, обычно я не «бросаю кости» и больше ориентирован на факты; поэтому, если вы не хотите пробовать, я прекрасно понимаю вас, @onar3d!!
Понял. На данный момент у меня закончились «безумные идеи», и пора мне уже готовиться ко сну. Удачи, и надеюсь, что кто-то из умных членов нашей команды предложит более удачные варианты для проверки.
После ещё нескольких попыток (огромное спасибо @IAmGav!) подтвердилось, что моя настройка Discourse работает с другим почтовым сервером, что исключает ряд вариантов для проверки.
Мой провайдер почтового сервера ответил мне сообщением об ошибке из их логов и предложением:
Инженер проверил логи, и ошибка, зафиксированная с их IP-адреса, связана с настройками SSL. Скорее всего, используется старая версия или устаревшие настройки подключения.
Подтверждение:
Ошибка TLS при подключении от [95.216.139.49]:33568 SSL_accept: TCP-соединение закрыто удалённой стороной.
Попробуйте отключить режим SSL, чтобы проверить, заработает ли это.
Я попробовал установить переменную DISCOURSE_SMTP_ENABLE_START_TLS в значение false, как указано выше, на портах 465 и 26 (указанных моим провайдером как порт для подключения без SSL), но ни один из вариантов не сработал.
Может ли это быть связано с тем, что я ещё не приобрёл SSL-сертификат для домена thewizardofosc.com? Я понял это, прочитав дополнительную информацию.
Если это не работает с вариантом без SSL, то это не будет работать и с платным SSL. Ваш хостинг-провайдер электронной почты должен предоставить вам бесплатный SSL-сертификат Let’s Encrypt.
Возможно, стоит запустить ваши тесты curl с включённым параметром подробного вывода -v, чтобы вы могли полностью проанализировать успешное рукопожатие, а затем двигаться от этого анализа в обратном направлении.