Я протестировал SMTP-сервер с помощью Telnet:
Telnet успешно подключился к SMTP-серверу.
Telnet позволил мне пройти аутентификацию на SMTP-сервере.
Telnet позволил мне успешно отправить письмо через SMTP-сервер; при этом я использовал те же значения, что и в файле /var/discourse/containers/app.yaml.
Утилита Discourse doctor сообщает, что Discourse успешно подключился к SMTP-серверу.
Однако утилита Discourse doctor сообщает, что Discourse не смог отправить тестовое письмо.
Следовательно, в Discourse есть ошибки, препятствующие отправке писем.
Случайно вы не используете smtp-relay.gmail.com, возможно, из DigitalOcean? Похоже, что недавно это перестало работать, и пока никто точно не знает почему.
Нет. Поскольку SMTP-сервер работает безупречно, как уже описывалось, и Discourse установлен корректно и правильно отображает экран с запросом на отправку электронного письма для регистрации администратора. Однако это письмо не отправляется.
Я обнаружил ошибку в /var/discourse/shared/standalone/log/rails/production.log:
Rendering layouts/email_template.html.erb
Rendered layouts/email_template.html.erb (Duration: 0.1ms | Allocations: 32)
Delivered mail f915c15e-9c4d-4d4e-9527-81bc4984540c@forum.domain.com (63.7ms)
Job exception: hostname "mail.forum.domain.com" does not match the server certificate
Это похоже не на ошибку в Discourse. Скорее всего, проблема в конфигурации DNS-резолвера хоста или в SSL-сертификате.
Поскольку telnet не использует SSL, вероятно, поэтому вы обнаружили, что он работает. В Linux вы можете продвинуться дальше в тестировании, используя OpenSSL для проверки подключения и анализа сертификатов.
HTTPS на сайте работает, так как в адресной строке отображается зелёный замок. С SSL-сертификатом сайта всё в порядке. Проблема заключается в том, как Discourse определяет SSL-сертификат.
При настройке локального SMTP-сервера на той же машине, что и контейнер Discourse, в документации не указаны точные значения параметров SMTP в файле app.yml. Это вызывает значительную путаницу и ошибки.
В настройках app.yml неясно указано, что именно должно быть значением параметра DISCOURSE_SMTP_ADDRESS.
В сообщении об ошибке, возникающем после неудачной отправки первого письма регистрации, неясно указано, что такое «серверный сертификат». Сообщение об ошибке находится в:
/discourse/shared/standalone/log/rails/production.log
«Job exception: hostname “mail.forum.domain.com” does not match the server certificate».
Однако на самом деле «серверный сертификат» — это просто SSL-сертификат сервера.
Кроме того, в сообщении об ошибке Discourse ошибочно упоминает «hostname», тогда как на самом деле имеется в виду параметр DISCOURSE_SMTP_ADDRESS.
Возникли трудности из-за неопределённости в документации Discourse.
Решение заключалось просто в том, чтобы установить правильный SSL-сертификат на сервер.
Когда проблема была опубликована на форуме Discourse, было получено множество вводящих в заблуждение и неясных ответов.
Теперь Discourse Doctor сообщает, что письмо было отправлено:
Отправка письма на admin@email.com. . .
Тестирование отправки на admin@email.com через forum.domain.com:587.
Подключение к SMTP-серверу успешно.
Отправка на admin@email.com. . .
Письмо принято SMTP-сервером.
Однако в почтовом ящике получателя, включая папку «Спам», письма нет.
Проверьте логи вашего локального SMTP-сервера. Если Discourse успешно доставил сообщение на SMTP-сервер, то дальнейшая судьба сообщения уже не зависит от Discourse.
Ошибка означает, что проверка отправителя не удалась. Это происходит, когда почтовый сервер не может подтвердить валидность адреса отправителя (noreply@forum.domain.com) в процессе проверки обратного пути (sender verification). Возможные причины:
DNS-запись MX для домена forum.domain.com отсутствует или настроена неверно.
Сервер, отвечающий за домен forum.domain.com, отклоняет запросы на проверку отправителя.
Проблемы с PTR-записью (обратный DNS) для IP-адреса отправителя.
Сервер получателя (email.com) требует строгой проверки отправителя и не принимает письмо из-за неудачи этой проверки.
Рекомендуется проверить конфигурацию DNS для домена forum.domain.com и убедиться, что сервер настроен правильно для обработки запросов на проверку отправителя.