Discourse SMTP отправляет "EHLO localhost" вместо домена, что нарушает работу Google smtp-relay

@iwaffles -

Пытались ли вы выполнить шаги по устранению проблемы в этой теме и других связанных с ней?

Добавьте строку в ваш app.yml:

DISCOURSE_SMTP_DOMAIN: [fqdn вашего сервера]

Затем в /var/discourse выполните: ./launcher rebuild app

Утилита discourse-doctor может по-прежнему сообщать об ошибках, но тестовые письма из административной консоли должны отправляться, и обычный поток писем должен возобновиться.

Если это не сработает, пожалуйста, сообщите об этом, так как в таком случае существует какой-то другой аспект, который ещё не был выявлен.

3 лайка

Я попробовал пересобрать, и всё работает!

Вы правы, discourse-doctor у меня всё ещё не работает.

Кажется, я раньше перезапускал Discourse вместо пересборки, поэтому изменения, вероятно, не вступили в силу. Спасибо @Syonyk!

2 лайка

Кажется очевидным, что localhost всегда неверен, но большинство SMTP-серверов игнорируют это значение, поэтому это не имело значения.

Три места, где smtp_domain встречается в https://github.com/discourse/discourse, все относятся к периоду 2–7 лет назад. Я задавался вопросом, не начала ли какая-то библиотека по какой-то причине отправлять localhost?

Я считаю, что лучшее решение, несмотря на опасения @Falco, — это действительно исправить это в каком-то месте, например

Независимо от того, будет ли консенсус заключаться в том, чтобы продолжать отправлять localhost, несмотря на то, что это противоречит RFC, исправление задачи rake, описанное выше, обязательно. Кстати, этот код написал я. :man_shrugging: Но, подождите. Я вижу, что action_mailer.smtp_settings['domain'] может быть пустым. Так что, наверное,

    Net::SMTP.start(smtp[:address], smtp[:port], 'localhost', smtp[:user_name], smtp[:password], smtp[:authentication])

следует заменить на

     Net::SMTP.start(smtp[:address], smtp[:port], smtp[:domain] || 'localhost', smtp[:user_name], smtp[:password], smtp[:authentication])

по крайней мере на данный момент. Я думаю, что это должно использовать domain, если он существует, и использовать текущее (но ошибочное?) поведение с использованием localhost, если discourse_smtp_host не определен.

Я не хочу добавлять это в discourse-setup, так как для почти всех всё работает как есть, и это ещё один довольно запутанный вопрос. (А я вот-вот добавлю вопрос для notification_email, так что, если мы не будем осторожны, это начнёт напоминать то, что я помню о создании ядра Linux пару десятилетий назад.)

Возможно, именно отсюда и берётся localhost?

2 лайка

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

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

2 лайка

Спасибо за отчет! Я скоро добавлю исправление для этого в настройку Discourse.

2 лайка

Теперь это:

  • Добавлено как пример конфигурации окружения во всех файлах с примерами

  • Запрашивается при настройке новой установки Discourse

  • Исправлено в утилите discourse doctor и задаче rake

Спасибо всем :tada:

5 лайков