Почта не работает: Net::SMTPAuthenticationError

Я размещаю сервер Discourse на DigitalOcean, домен у PorkBun, почтовый сервер — MailGun.

Мой аккаунт MailGun активирован, и домен (discourse.mydomain.com) подтверждён для использования с mg.mydomain.com. Все необходимые DNS TXT-записи настроены.

Я выполнил все шаги по устранению неполадок из этой темы много раз: Troubleshoot email on a new Discourse install

Я могу подключиться через telnet к хосту и вручную отправить письмо без проблем (https://serverfault.com/questions/49935/easiest-way-to-send-a-test-email-from-a-server-to-test-settings).

Файл app.yml содержит следующее:

  DISCOURSE_DEVELOPER_EMAILS: 'myemail@gmail.com'
  DISCOURSE_SMTP_ADDRESS: smtp.mailgun.org
  DISCOURSE_SMTP_PORT: 587
  DISCOURSE_SMTP_USER_NAME: mail
  DISCOURSE_SMTP_PASSWORD: "12345678901234567890"
  DISCOURSE_SMTP_DOMAIN: mg.mydomain.com
  DISCOURSE_NOTIFICATION_EMAIL: admin@mg.mydomain.com

При запуске discourse-doctor или при выполнении ./launcher enter app с последующим запуском rake 'emails:test[mail@mg.mydomain.com]' возникает следующая ошибка:

======================================== ОШИБКА ========================================
                                    НЕОЖИДАННАЯ ОШИБКА

Net::SMTPAuthenticationError

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

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

Что-то не так в Discourse, поскольку у меня нет проблем с ручной отправкой писем. Я уже много часов ищу в Google и на форумах, но решений пока не нашёл. Есть какие-либо идеи?

Что-то не так с вашим именем пользователя или паролем. Возможно, в вашем пароле есть символ, требующий экранирования, например звёздочка или одинарная кавычка (поэтому проще всего изменить пароль так, чтобы он не содержал такого символа).

См. Устранение неполадок с электронной почтой при новой установке Discourse

Пароль не содержит ни одного из этих символов. На самом деле это автоматически сгенерированный пароль от MailGun, который состоит только из букв, цифр и нескольких символов «-». Он довольно длинный.

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

Скорее всего, DISCOURSE_SMTP_USER_NAME указан неверно — mail вряд ли достаточно для аутентификации в Mailgun. Вероятно, следует указать mail@mg.mydomain.com.

Кажется, вы полагаете, что DISCOURSE_SMTP_DOMAIN — это домен пользователя? Это не так — это домен EHLO. Скорее всего, вам вообще не нужно его устанавливать.

Я тоже только что это понял. Когда я тестировал через telnet, я использовал в качестве имени пользователя “mail@mg.mydomain.com”, и это сработало. Поэтому я попробую снова, указав это значение в DISCOURSE_SMTP_USER_NAME.

Я предполагаю, что вы думаете, будто DISCOURSE_SMTP_DOMAIN — это домен пользователя? Это не так — это домен EHLO. Скорее всего, вам не нужно его настраивать.

Не совсем понимаю, что это значит.

Для MailGun я использовал mg.mydomain.com, а для Discourse — discourse.mydomain.com. На данный момент у меня вообще нет никаких DNS-записей для mydomain.com, только для поддомена Discourse и TXT-записей для DNS MailGun.

Удалите строку DISCOURSE_SMTP_DOMAIN, вам она почти наверняка не нужна.

Она используется во время SMTP-переговоров в качестве домена HELO/EHLO.

Да, и ещё: когда я тестировал через telnet, я действительно мог отправлять письма со всех следующих адресов:

  • mail@discourse.mydomain.com
  • mail@mydomain.com
  • mail@mg.mydomain.com

Не уверен, какой из них мне следует использовать? Имеет ли это значение?

Это зависит от вашей конфигурации и того, как вы хотите организовать поток почты.

Сейчас всё работает, спасибо всем за помощь :slight_smile:

Решение заключалось в использовании

  DISCOURSE_SMTP_USER_NAME: mail@mg.mydomain.com

вместо

  DISCOURSE_SMTP_USER_NAME: mail