Отправка писем не работает

Мой Droplet с Discourse на DigitalOcean не может отправлять письма. Ошибка, которую я получаю:

Delivered mail d8f9bf03-a3ce-4b42-8226-fc4f40a9c724@foo.barbar.com (5099.4ms)

Job exception: 504 5.7.4 Unrecognized authentication type [BL0PR0102CA0036.prod.exchangelabs.com]

Мои настройки:

  DISCOURSE_SMTP_ADDRESS: smtp.office365.com
  DISCOURSE_SMTP_PORT: 587
  DISCOURSE_SMTP_USER_NAME: foo@bar.com
  DISCOURSE_SMTP_PASSWORD: "mypassword"
  DISCOURSE_SMTP_ENABLE_START_TLS: true           # (опционально, по умолчанию true)

Я проверял подключение через telnet с Droplet, ошибок нет:
telnet smtp.office365.com 587

В чём может быть проблема? Я пробовал использовать комбинацию SMTP-настроек локально через Python, и всё работает, так что, думаю, дело не в них.

Привет!
Попробуйте добавить:

  DISCOURSE_SMTP_AUTHENTICATION: login

И в конец файла app.yml:

 - exec: rails r "SiteSetting.notification_email='foo@bar.com'"

Привет, mik

Выполнение команды exec не удалось:

FAILED

--------------------

Pups::ExecError: rails r "SiteSetting.notification_email='foo@bar.com'"` завершилась с кодом возврата #<Process::Status: pid 2229 exit 2>

Место ошибки: /pups/lib/pups/exec_command.rb:112:in `spawn'

exec не удалось с параметрами "rails r \"SiteSetting.notification_email='foo@bar.com'\"`

9628e31c775b74ad0f3a555b6af27701aa40b1f8b86419fa44a7c389cc5e34ae

** НЕ УДАЛОСЬ ИНИЦИАЛИЗИРОВАТЬ ** Пожалуйста, прокрутите вверх и найдите предыдущие сообщения об ошибках — их может быть несколько.

./discourse-doctor может помочь диагностировать проблему.

Обновление, исключающее команду exec, но добавляющее:

  DISCOURSE_SMTP_AUTHENTICATION: login

не возвращает ошибку; я получаю только:
Delivered mail be6d8718-5445-48cc-a120-6d6d1eab9eb7@discourse.bar.com (4307.2ms)

Однако письмо так и не появилось во входящих (я проверил папку «Спам»).

Вы можете попробовать это, чтобы найти правильную конфигурацию и, возможно, получить сообщение об ошибке:

docker exec -t -i id_of_your_container /bin/bash

Затем внутри контейнера:

apt install s-nail
echo "Это тело сообщения и содержит сообщение" | s-nail -r "foo@bar.com" -s mysubject -S "smtp=smtp.office365.com:587" -S smtp-use-starttls -S smtp-auth=login -S smtp-auth-user="foo@bar.com" -S smtp-auth-password="xxxxxxxx" -S ssl-verify=ignore youremail@example.com

Вы можете изменить различные значения (например: smtp-auth=login), чтобы попробовать найти правильное. И, возможно, вы получите более точное сообщение об ошибке.

echo "Это тело сообщения и оно содержит сообщение" | s-nail -r "foo@bar.com" -s mysubject -S "smtp=smtp.office365.com:587" -S smtp-use-starttls -S smtp-auth=login -S smtp-auth-user="foo@bar.com" -S smtp-auth-password="xxxxxxxx" -S ssl-verify=ignore youremail@example.com

Это сработало, и я получил письмо! Однако мне пришлось изменить smtp-auth-password="xxxxxxxx" на одинарные кавычки, так как мой пароль начинается с символа ‘!’.

Единственное отличие, которое я вижу в моей конфигурации, — это флаг:
-S ssl-verify=ignore

Мне тоже нужно его добавить?
Спасибо за помощь!

Попробуйте добавить:

DISCOURSE_SMTP_OPENSSL_VERIFY_MODE: none

В ваш конфигурационный файл. Это то же самое, что и ssl-verify=ignore.

Ошибок нет, но письма до сих пор не в папке входящих :frowning: Напомню, вот моя текущая конфигурация:

  DISCOURSE_SMTP_ADDRESS: smtp.office365.com
  DISCOURSE_SMTP_PORT: 587
  DISCOURSE_SMTP_USER_NAME: info@foo.com
  DISCOURSE_SMTP_PASSWORD: 'xxx'
  DISCOURSE_SMTP_ENABLE_START_TLS: true           # (необязательно, по умолчанию true)
  DISCOURSE_SMTP_AUTHENTICATION: login
  DISCOURSE_SMTP_OPENSSL_VERIFY_MODE: none

Пожалуйста, попробуйте добавить это снова (это то же самое, что и опция «-r» в тесте командной строки s-nail:

  - exec: rails r "SiteSetting.notification_email='foo@bar.com'"

Электронная почта должна совпадать с вашей учётной записью.

Также проверьте отступы в файле app.yml и не забудьте знак «-» в начале. Там два пробела, затем «-», затем пробел, а затем «exec…» :slight_smile:

У меня тоже возникла эта проблема. Я также развернул Droplet с Discourse на Digital Ocean. После всех этих советов и повторной сборки (sudo ./launcher rebuild app) я выполнил команду “sudo ./discourse-doctor”.

504 5.7.4 Неопознанный тип аутентификации [BL0PR01CA0015.prod.exchangelabs.com]

Команда s-nail внутри контейнера также сработала у меня без проблем. Я также попробовал её без флага “-S ssl-verify=ignore” — всё сработало отлично. Не мог бы кто-нибудь подтвердить, что установленное на Droplet Digital Ocean корректно отправляет электронную почту?

Узнайте у ваших администраторов почты допустимые значения smtp_authentication и установите DISCOURSE_SMTP_AUTHENTICATION в одно из работающих.

Спасибо за всю помощь, я сдался и перешёл на другое решение для форума.

Это Microsoft, их инструкции следующие: параметр smtp_authentication не указан;

  • Имя SMTP-сервера: smtp.office365.com
  • Порт SMTP: 587
  • Метод шифрования SMTP: STARTTLS

Вы не поддерживаете серверы такого типа? Можете ли вы просто создать учётную запись, подключиться к ней и сообщить нам, какими должны быть настройки?

DISCOURSE_SMTP_OPENSSL_VERIFY_MODE: none

Это решило мою проблему, спасибо!