Проблемы с SMTP-сервером Outlook (SMTPSyntaxError)

Всем привет!

Я работаю над запуском самописной версии Discourse на сервере под управлением CentOS. В целом всё выглядит хорошо: я настроил имя хоста и другие параметры, Docker-контейнер успешно запускается, и я могу получить доступ к экземпляру Discourse в своей локальной сети по адресу http://discourse.foo.co.

Однако здесь я немного застрял, так как не могу создать первого пользователя. Похоже, что используемые мной настройки SMTP не работают и постоянно вызывают ошибку Net::SMTPSyntaxError, независимо от того, что я пробую.

Мои настройки SMTP в файле app.yml:

## TODO: Список email-адресов через запятую, которые станут администраторами и разработчиками
  ## при первой регистрации. Пример: 'user1@example.com,user2@example.com'
  DISCOURSE_DEVELOPER_EMAILS: 'brian@foo.co'

  ## TODO: SMTP-сервер для проверки новых аккаунтов и отправки уведомлений
  # Адрес SMTP, имя пользователя и пароль обязательны
  # ВНИМАНИЕ: символ '#' в пароле SMTP может вызвать проблемы!
  DISCOURSE_SMTP_ADDRESS: foo.mail.protection.outlook.com
  DISCOURSE_SMTP_PORT: 25
  DISCOURSE_SMTP_USER_NAME: user@foo.co
  DISCOURSE_SMTP_PASSWORD: пароль, содержащий специальные символы '@' и '/'. Символ '#' в пароле отсутствует.
  DISCOURSE_SMTP_AUTHENTICATION: login
  DISCOURSE_SMTP_ENABLE_START_TLS: true         # (необязательно, по умолчанию true)
  #DISCOURSE_SMTP_DOMAIN: discourse.example.com    # (требуется некоторыми провайдерами)
  DISCOURSE_NOTIFICATION_EMAIL: 'community@foo.co'    # (адрес для отправки уведомлений)

Я пересмотрел все форумы Discourse, но поиск по запросу ‘SMTPSyntaxError’ не дал результатов. В Google тоже не удалось найти работающих решений.

Те же настройки SMTP при вводе на наших серверах Bamboo и Jira работают безупречно и позволяют отправлять письма.

Я также использовал онлайн-инструменты для тестирования, например https://dnschecker.org/smtp-test-tool.php, и они успешно отправляют тестовые письма. Например, ввод тех же данных, что указаны выше, позволяет успешно отправить тестовое письмо со следующим содержимым в мой почтовый ящик:

SMTP-хост: foo.mail.protection.outlook.com.
Порт: 25
Использовать явное шифрование TLS: Нет
Использовать неявное шифрование TLS/SSL:
Использовать аутентификацию: Нет
От кого: test@foo.co
Кому: brian@foo.co

Буду признателен за любую помощь.
Спасибо,
Брайан

Я бы посоветовал перехватить трафик, идущий от вашего контейнера к SMTP-серверу, чтобы точно увидеть, что происходит в сети.

Вы можете инициировать отправку письма, выполнив внутри контейнера:

rake 'emails:test[your.email.address@your.domain]' 

И вы должны увидеть что-то вроде:

root@michael-discourse-docker-app:/var/www/discourse# rake 'emails:test[michael@contoso.com]'
Testing sending to michael@contoso.com using mail.contoso.net:587, username:michael with plain auth.
SMTP server connection successful.
Sending to michael@contoso.com. . . 
Mail accepted by SMTP server.
Message-ID: e7adb5c4-f404-4800-b070-631b06ff5335@mx1.contoso.com

Это также может дать вам некоторые подсказки.

Привет, Майкл,

Спасибо за предложение, но, похоже, возникает та же ошибка, что и при использовании ./discourse-doctor.

root@discourse-app:/var/www/discourse# rake 'emails:test[brian.lui@foo.co]'
Testing sending to brian.lui@foo.co using foo.mail.protection.outlook.com:25, username:user@foo.co with login auth.
======================================== ERROR ========================================
                                    UNEXPECTED ERROR

Net::SMTPSyntaxError

====================================== SOLUTION =======================================
This is not a common error. No recommended solution exists!

Please report the exact error message above to https://meta.discourse.org/
(And a solution, if you find one!)
=======================================================================================

Брайан

Когда я запускаю команду внутри контейнера (как указано в руководстве по устранению неполадок SMTP для Discourse):

openssl s_client -connect foo.mail.protection.outlook.com:25 -starttls smtp

Всё выглядит нормально, но вместо 250 DSN я вижу 250 SMTPUTF8. Затем, когда я пытаюсь ввести команду EHLO "i am here", ничего не происходит, и в итоге происходит тайм-аут:

451 4.7.0 Timeout waiting for client input [YT1PEPF00001E8C.CANPRD01.PROD.OUTLOOK.COM 2024-02-23T17:51:16.770Z 08DC342D15BDD245] read:errno=0

Я получаю тот же результат.

У меня нет других предложений, кроме того, что, похоже, проблема в самом почтовом сервере, а не в Discourse.

Я не ожидал, что этот сервер будет использоваться для отправки почты. Вы уверены, что это правильно?

Я вижу, что другие люди использовали другой сервер отправки, и у них это заработало: