Не удается установить DISCOURSE_SMTP_AUTHENTICATION: login

Привет, у меня возникли проблемы с отправкой почты. Я использую Mailjet и получаю ошибку:

Connection reset by peer

Теперь я пытаюсь установить DISCOURSE_SMTP_AUTHENTICATION: login в app.yml. Возможно, это решит проблему.

После этого я выполнил ./launcher restart app, но при повторном запуске discourse-doctor снова появляется сообщение with plain auth.

Поднято, забыл добавить категорию поддержки

Вам нужно сначала уничтожить, а затем запустить.

Спасибо, это сработало, но похоже, я исправлял не то — всё ещё выводится:
Job exception: Connection Reset by peer

Не имею понятия, куда смотреть для исправления. Я использую DigitalOcean и отправляю через порт 587. Вернул обратно plain auth, так как, судя по всему, в Mailjet это обязательно. По их словам, TLS опционален, но я пробовал и с TLS, и без — безрезультатно. Честно говоря, не знаю, что ещё можно изменить. Пробовал с двойными кавычками вокруг пароля и без. Также перепроверил uname и pwd.

DISCOURSE_DEVELOPER_EMAILS: 'user@email.com'

  ## TODO: SMTP-сервер для проверки новых аккаунтов и отправки уведомлений
  # Адрес SMTP, имя пользователя и пароль обязательны
  # ВНИМАНИЕ: символ '#' в пароле SMTP может вызвать проблемы!
  DISCOURSE_SMTP_ADDRESS: in-v3.mailjet.com
  DISCOURSE_SMTP_PORT: 587
  DISCOURSE_SMTP_USER_NAME: uname
  DISCOURSE_SMTP_PASSWORD: pwd
  DISCOURSE_SMTP_ENABLE_START_TLS: true
  DISCOURSE_SMTP_DOMAIN: radstarter.io
  DISCOURSE_NOTIFICATION_EMAIL: noreply@radstarter.io
  ## Если вы добавили шаблон Lets Encrypt, раскомментируйте ниже, чтобы получить бесплатный SSL-сертификат
  LETSENCRYPT_ACCOUNT_EMAIL: me@example.com

Буду благодарен за любую помощь.

Вы можете проверить, устанавливается ли соединение или происходит тайм-аут при выполнении команды telnet in-v3.mailjet.com 587. Если соединение завершается тайм-аутом, значит исходящий порт заблокирован. В этом случае вам нужно использовать другой порт (для Mailjet может подойти порт 2525, но я не уверен) или обратиться в Digital Ocean с просьбой разблокировать этот порт.

Я могу подключиться через telnet, но соединение сразу же разрывается

~# telnet in-v3.mailjet.com 587
Trying 104.199.96.85...
Connected to in.mailjet.com.
Escape character is '^]'.
Connection closed by foreign host.

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

Ещё один вариант, который можно попробовать, — telnet smtp-relay.gmail.com 587. Если это тоже завершится неудачей аналогичным образом, скорее всего, порт заблокирован на вашем сервере DigitalOcean. Это может быть фаервол вне вашего сервера или программное обеспечение фаервола, работающее на самом сервере.

В первом случае вы, возможно, сможете управлять этим через панель управления вашего аккаунта, либо вам потребуется связаться с поддержкой. Во втором случае, скорее всего, используется iptables; вы можете выполнить следующую команду, чтобы проверить это и просмотреть правила, применяемые к исходящим соединениям.

iptables -S OUTPUT

Тогда, скорее всего, всё в порядке.

Если он заблокирован, то это почти наверняка сделано на сетевом уровне вне операционной системы дроплета. (Если только он сам не настроил фаервол, чтобы заблокировать себя, не зная об этом.)

Есть несколько тем, посвященных Mailjet. Вы их уже смотрели?

iptables -S OUTPUT

-P OUTPUT ACCEPT
-A OUTPUT -j ufw-before-logging-output
-A OUTPUT -j ufw-before-output
-A OUTPUT -j ufw-after-output
-A OUTPUT -j ufw-after-logging-output
-A OUTPUT -j ufw-reject-output
-A OUTPUT -j ufw-track-output

Gmail SMTP работает безупречно

Да, я проверил множество тем на Mailjet, и ни одна из них не противоречит моему решению.

Я использовал установку в один клик, скорее всего, поэтому произошла ошибка. Удалю droplet и выполню чистую установку.

РЕДАКТИРОВАНИЕ: Всё работает. Примечание: никогда не используйте установщик в один клик.