Проблемы с отправкой писем

Здравствуйте.

Я пытался отправить письмо после смены почтового сервера. Раньше всё работало отлично, но теперь я не могу отправлять письма. Дело в том, что соединение на 100% работает, как вы можете видеть. Однако по каким-то причинам отправка письма не удаётся.

Email адрес для тестовой рассылки? ('n' чтобы пропустить) [community@brohosting.eu]:
Отправка письма на community@brohosting.eu. . .
Тестирование отправки на community@brohosting.eu через smtppro.zoho.eu:587, имя пользователя: info@brohosting.eu с авторизацией по логину.
Соединение с SMTP-сервером успешно.
Отправка на community@brohosting.eu. . .
Отправка письма не удалась.
Достигнут конец файла.

Есть какие-нибудь предложения?

Проверьте, что ваш провайдер VPS-хостинга разблокировал SMTP-порт (хотя подключение, похоже, подтверждено). Также проверьте логи вашего почтового сервиса на наличие записей о запросе.

Работает на моём Raspberry, как и всегда. Но да, соединение хорошее. Я проверю с Zoho.

Я уже видел сообщение «конец файла», но не помню, как это исправлялось. Попробуйте поискать здесь, возможно, вы найдёте решение.

На самом деле никакого решения для этого быть не должно. Зачем мне что-то менять, если соединение было установлено успешно?

Кроме того, да, я нашёл несколько подобных тем, в том числе одну ветку, где вы отвечали, но я не собираюсь переходить на порт 465, который устарел. Очевидно, проблема в Discourse или в его библиотеке отправки почты.

Не могли бы вы поделиться своим отредактированным файлом app.yml? Мне кажется, что в вашем разделе SMTP что-то отсутствует или настроено неправильно.

Я могу поделиться, но как может быть неправильно настроена конфигурация, если соединение установлено успешно?

## это шаблон контейнера Docker Discourse "всё в одном", автономный
##
## После внесения изменений в этот файл ВЫ ДОЛЖНЫ выполнить пересборку
## /var/discourse/launcher rebuild app
##
## БУДЬТЕ *ОЧЕНЬ* ОСТОРОЖНЫ ПРИ РЕДАКТИРОВАНИИ!
## YAML-ФАЙЛЫ ЧРЕЗВЫЧАЙНО ЧУВСТВИТЕЛЬНЫ К ОШИБКАМ В ПРОБЕЛАХ ИЛИ ВЫРАВНИВАНИИ!
## посетите http://www.yamllint.com/, чтобы при необходимости проверить этот файл

templates:
  - "templates/postgres.template.yml"
  - "templates/redis.template.yml"
  - "templates/web.template.yml"
  - "templates/web.ratelimited.template.yml"
## Раскомментируйте эти две строки, если хотите добавить Lets Encrypt (https)
#  - "templates/web.ssl.template.yml"
#  - "templates/web.letsencrypt.ssl.template.yml"

## какие TCP/IP-порты должен открывать этот контейнер?
## Если вы хотите, чтобы Discourse использовал один порт с другим веб-сервером, например Apache или nginx,
## см. https://meta.discourse.org/t/17247 для подробностей
expose:
  - "8080:8080"   # http
  - "15432:5432" # PostgreSQL
#  - "8443:8443" # https

params:
  db_default_text_search_config: "pg_catalog.english"

  ## Установите db_shared_buffers максимум на 25% от общего объема памяти.
  ## будет установлено автоматически при загрузке на основе обнаруженной оперативной памяти, или вы можете переопределить
  #db_shared_buffers: "256MB"

  ## может улучшить производительность сортировки, но увеличивает использование памяти на подключение
  #db_work_mem: "40MB"

  ## Какую ревизию Git должен использовать этот контейнер? (по умолчанию: tests-passed)
  #version: tests-passed

env:
  LC_ALL: en_US.UTF-8
  LANG: en_US.UTF-8
  LANGUAGE: en_US.UTF-8
  EMBER_CLI_PROD_ASSETS: 1
  # DISCOURSE_DEFAULT_LOCALE: en

  ## Сколько одновременных веб-запросов поддерживается? Зависит от памяти и количества ядер процессора.
  ## будет установлено автоматически при загрузке на основе обнаруженных процессоров, или вы можете переопределить
  #UNICORN_WORKERS: 3

  ## TODO: Доменное имя, на которое будет отвечать этот экземпляр Discourse
  ## Обязательно. Discourse не будет работать с обычным IP-адресом.
  DISCOURSE_HOSTNAME: community.brohosting.eu

  ## Раскомментируйте, если хотите, чтобы контейнер запускался с тем же
  ## именем хоста (опция -h), что указано выше (по умолчанию "$hostname-$config")
  #DOCKER_USE_HOSTNAME: true

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

  ## TODO: SMTP-сервер, используемый для проверки новых аккаунтов и отправки уведомлений
  ## Для SMTP-адреса, имени пользователя и пароля требуется указать все три значения
  ## ВНИМАНИЕ: символ '#' в пароле SMTP может вызвать проблемы!
  DISCOURSE_SMTP_ADDRESS: smtppro.zoho.eu
  DISCOURSE_SMTP_PORT: 587
  DISCOURSE_SMTP_USER_NAME: info@brohosting.eu
  DISCOURSE_SMTP_PASSWORD: "XXXXXXXXXXXX"
  DISCOURSE_SMTP_ENABLE_START_TLS: true           # (необязательно, по умолчанию true)
  DISCOURSE_SMTP_DOMAIN: brohosting.eu
  DISCOURSE_SMTP_AUTHENTICATION: login
  DISCOURSE_NOTIFICATION_EMAIL: community@brohosting.eu

  ## Если вы добавили шаблон Lets Encrypt, раскомментируйте ниже, чтобы получить бесплатный SSL-сертификат
#  LETSENCRYPT_ACCOUNT_EMAIL: info@brohosting.eu

  ## Адрес CDN http или https для этого экземпляра Discourse (настроен на получение)
  ## см. https://meta.discourse.org/t/14857 для подробностей
  #DISCOURSE_CDN_URL: https://discourse-cdn.example.com

  ## Ключ адреса геолокации MaxMind для поиска по IP-адресам
  ## см. https://meta.discourse.org/t/-/137387/23 для подробностей
  #DISCOURSE_MAXMIND_LICENSE_KEY: 1234567890123456

## Контейнер Docker не имеет состояния; все данные хранятся в /shared
volumes:
  - volume:
      host: /var/discourse/shared/standalone
      guest: /shared
  - volume:
      host: /var/discourse/shared/standalone/log/var-log
      guest: /var/log

## Плагины размещаются здесь
## см. https://meta.discourse.org/t/19157 для подробностей
hooks:
  after_code:
    - exec:
        cd: $home/plugins
        cmd:
          - git clone https://github.com/discourse/docker_manager.git
          - git clone https://github.com/discourse/discourse-chat.git
          - git clone https://github.com/discourse/discourse-reactions.git
          - git clone https://github.com/discourse/discourse-solved.git
          - git clone https://github.com/discourse/discourse-voting.git
          - git clone https://github.com/discourse/discourse-chat-integration.git


## Любые пользовательские команды для запуска после сборки
run:
  - exec: echo "Начало пользовательских команд"
  ## Если вы хотите установить адрес электронной почты "От" для вашей первой регистрации, раскомментируйте и измените:
  ## После получения первого письма о регистрации снова закомментируйте строку. Это нужно выполнить только один раз.
  #- exec: rails r "SiteSetting.notification_email='info@unconfigured.discourse.org'"
  - exec: echo "Конец пользовательских команд"

Имеет ли адрес info@brohosting.eu правильную конфигурацию для отправки писем от имени community@brohosting.eu?

Это необходимо проверить на стороне вашего SMTP-провайдера.

Я попробую что-нибудь и сообщу вам.

Спасибо, Бхану, я не обратил на это достаточно внимания. Я ненавижу настройки Zoho, потому что они слишком сильно скрывают эти опции.

Хорошая новость в том, что вы не потратили пять дней на отладку библиотеки smtp, как вы предполагали!

(Я сам недавно потратил дюжину часов за несколько дней, отлаживая код, который вставлял выпадающее меню, которое не выпадало. Я изучал кофе, который вставлял выпадающее меню. Я исследовал кофе, который генерировал данные для выпадающего меню. Я сравнил его с тем, как работают другие выпадающие меню. Затем я обнаружил одну маленькую строку CSS, которую я вставил, из-за которой для выпадающего меню не осталось места, куда выпасть.)

Рада, что у вас всё заработало!

Я имею в виду, что всё равно можно было бы хотя бы проверить и выдать более понятную ошибку, потому что это действительно сбивает с толку.

Вот почему стандартная установка включает список рекомендуемых поставщиков электронной почты. Если вы хотите отклониться от этих рекомендаций, вы также принимаете дополнительную техническую сложность, которую это влечёт. Не все почтовые серверы работают одинаково, и это не задача Discourse решать эти вопросы.

Итог вышесказанного: вы неправильно настроили Zoho. Discourse не видит эту конфигурацию и предполагает, что вы предоставляете ему корректные данные. Если бы вы снова запустили ./discourse-setup, он снова запросил бы у вас адрес отправки, который вы бы ввели неверно из-за этой ошибки в настройке.

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

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

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

Это было бы отлично.

Однако неясно, что сообщение «достигнут конец файла» всегда означает «вы не настроили почтовый сервис для используемого адреса отправки» или что-то подобное, что вы сделали для исправления ситуации.

Оказывается, после успешного подключения Discourse к почтовому серверу можно совершить множество ошибок. Если вы хотите получить более информативное сообщение об ошибке, попросите Zoho предоставить его, вместо того чтобы просто разрывать соединение.