Ошибка SMTP: сначала необходимо выполнить команду STARTTLS

Я пытаюсь настроить Discourse 2.7.0.beta4 с использованием SMTP-сервиса Mailersend.

После запуска ./discourse-doctor я получил следующую ошибку:

SMTP error: Must issue a STARTTLS command first

Вот моя текущая конфигурация app.yml в отношении SMTP:

  DISCOURSE_SMTP_ADDRESS: 'smtp.mailersend.net'
  DISCOURSE_SMTP_PORT: 587
  DISCOURSE_SMTP_USER_NAME: username@subdomain.domain.org
  DISCOURSE_SMTP_PASSWORD: mypasswordhere
 #DISCOURSE_SMTP_ENABLE_START_TLS: true           # (опционально, по умолчанию true)
 #DISCOURSE_SMTP_AUTHENTICATION: login
 #DISCOURSE_SMTP_OPENSSL_VERIFY_MODE: none

Я уже пробовал раскомментировать и явно установить DISCOURSE_SMTP_ENABLE_START_TLS в значение true, но ошибка сохраняется. То же самое касается DISCOURSE_SMTP_AUTHENTICATION: login.

После любого изменения в файле YML я перезапускаю систему следующей командой:

./launcher destroy app; ./launcher start app

Есть ли какие-либо советы относительно того, что происходит?

Заранее спасибо!

Я недавно внес изменения в discourse-setup, а также в rake-задачу, которую вы используете (полагаю, она ещё не слита).

Если вы хотите предоставить мне доступ к вашему серверу, я посмотрю.

Как я уже упоминал в личном сообщении, я не могу предоставить доступ к серверу из соображений безопасности. Однако огромное спасибо @pfaffman за вашу помощь и попытки решить эту проблему.

Позвольте добавить больше контекста: предыдущий администратор установил Discourse с использованием SMTP-сервиса Mailgun, но он перестал работать, и у меня нет доступа к той учётной записи.

Как я уже сказал, я сейчас пытаюсь настроить его с помощью Mailersend. Я прочитал эту тему [1] и другие обсуждения STARTTLS здесь, на форуме, но не уверен, как внедрить необходимые изменения.

Я также пробовал следующую настройку, но ошибка сохраняется:

DISCOURSE_SMTP_OPENSSL_VERIFY_MODE: none

Если это связано с каким-то недавним обновлением, может быть, лучше рассмотреть возможность отката версии?

[1] Can't send email with certificate issue - #3 by supermathie

У вас получилось это запустить?

Нет, я решил перейти на другой почтовый сервис. Теперь всё работает нормально с Mailjet.

У меня возникла похожая проблема. Вчера я около трёх часов отлаживал отправку электронной почты на новом экземпляре Discourse, но безрезультатно. Я пытаюсь отправлять письма через Fastmail с использованием STARTTLS на порту 587. Другие сервисы работают с теми же учётными данными.

При следующих настройках я не получаю ошибку «Must issue a STARTTLS command first»:

DISCOURSE_SMTP_ADDRESS: 'smtp.fastmail.com'
DISCOURSE_SMTP_PORT: 587
DISCOURSE_SMTP_USER_NAME: 'myuser@fastmail.fm'
DISCOURSE_SMTP_PASSWORD: 'mypass'
DISCOURSE_SMTP_ENABLE_START_TLS: true

После выполнения ./launcher rebuild app, при запуске ./discourse-doctor и попытке отправить письмо я получаю ответ с ошибкой 500 5.5.1 Invalid command.

Сегодня я начал отслеживать обмен данными с помощью tcpdump и заметил, что Discourse, по-видимому, на самом деле не использует STARTTLS. Вот что происходит при отправке восстановительного письма от Grafana:

< 220 smtp.fastmail.com ESMTP ready
> EHLO 9b5ba1569f77
< 250-smtp.fastmail.com
< 250-PIPELINING
< 250-SIZE 71000000
< 250-ENHANCEDSTATUSCODES
< 250-8BITMIME
< 250 STARTTLS
> STARTTLS
< ...[encrypted]

А в случае с Discourse происходит следующее:

< 220 smtp.fastmail.com ESMTP ready
> EHLO localhost
< 250-smtp.fastmail.com
< 250-PIPELINING
< 250-SIZE 71000000
< 250-ENHANCEDSTATUSCODES
< 250-8BITMIME
< 250 STARTTLS
> AUTH PLAIN [redacted]
< 500 5.5.1 Invalid command

Получается, что Discourse отправляет мои учётные данные в открытом виде через интернет, хотя в настройках включён STARTTLS? Это баг?

Также я заметил, что при запуске ./discourse-doctor в сводке «YML SETTINGS» вверху перечислены следующие параметры:

==================== YML SETTINGS ====================
DISCOURSE_HOSTNAME=forum.[redacted]
SMTP_ADDRESS=smtp.fastmail.com
DEVELOPER_EMAILS=sysadmin@[redacted]
SMTP_PASSWORD=[redacted]
SMTP_PORT=587
SMTP_USER_NAME=[redacted]@fastmail.fm
LETSENCRYPT_ACCOUNT_EMAIL=

Однако параметр DISCOURSE_SMTP_ENABLE_START_TLS нигде не упоминается, хотя он установлен в app.yml. Не знаю, связано ли это с данной проблемой.

О, это странно. Я создал учётную запись пользователя вручную (через rake admin:create), затем вошёл в систему, и вдруг уведомления по электронной почте стали работать. Однако отправка через discourse-doctor по-прежнему не удаётся.

Возможно, discourse-doctor сломан?

Извините. Я понимаю, насколько это может быть раздражающим.

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

Также существует rake-задача, которая, вероятно, подошла бы вам лучше.

    rake emails:test[x@y.com]

Вы следовали руководству Устранение неполадок с электронной почтой при новой установке Discourse?

Я не знал об этой команде, она действительно кажется полезной! Однако результат тот же:

root@app:/var/www/discourse# rake emails:test redacted@example.com
Тестирование отправки на  через smtp.fastmail.com:587, имя пользователя: myuser@fastmail.fm с простой аутентификацией.
======================================== ОШИБКА ========================================
                                    НЕОЖИДАННАЯ ОШИБКА

500 5.5.1 Неверная команда


====================================== РЕШЕНИЕ =======================================
Это не распространённая ошибка. Рекомендуемого решения не существует!

Пожалуйста, сообщите точное сообщение об ошибке выше на https://meta.discourse.org/
(И решение, если вы его найдёте!)
=======================================================================================

При просмотре tcpdump снова видно, что учётные данные AUTH PLAIN отправляются в открытом виде без шифрования STARTTLS.

Да, я изучил эту страницу.

Однако, судя по tcpdump, это выглядит как ошибка в инструментах диагностики, поскольку STARTTLS не используется, хотя соответствующая настройка включена в app.yml. (Само приложение Discourse использует STARTTLS. Я предполагаю, что многие провайдеры электронной почты также позволяют отправку незашифрованных писем, поэтому эта проблема возникнет только если кто-то использует инструменты диагностики и применяет провайдера, который не принимает незашифрованную отправку через SMTP.)

Ага. Похоже, что эта задача rake — та же самая, которую вызывает discourse-doctor. Извините за это.

Возможно, кто-нибудь сможет посмотреть, как сделать эту задачу rake более похожей на реальный процесс, или хотя бы не сдаваться, если его попытки понять, что происходит, слишком грубы. Хорошим первым шагом было бы сказать: «Ну, XXX, похоже, сломан, но мы всё равно попробуем…»