Оптимизация периода дайджеста Discourse

Всем привет,

Возможно ли оптимизировать период отправки дайджестов для тысяч сообществ? Каждый понедельник Discourse отправляет несколько тысяч писем за 1–2 секунды, что приводит к проблемам со спамом на нашем собственном почтовом сервере.

Как сбросить значение «last_digest_time» для каждого аккаунта и синхронизировать его с остальными тысячами аккаунтов?

Цель — получать 100–200 дайджестов в день вместо 5 тысяч по понедельникам. Мы используем Discourse уже 4 года, возможно, проблема связана с обновлением, которое мы часто выполняем до последней версии.

Также, возможно, есть подсказка, как получить доступ к базе данных PostgreSQL в образе Docker и где именно в БД нужно обновлять записи.

Заранее спасибо!

Вы можете сделать это в консоли Rails.

cd /var/discourse 
./launcher enter app
rails c

Затем вы можете выполнить что-то вроде

User.all.each do |u|
  Выполните нужные действия
end

Но вам следует просто исправить ваш почтовый сервер.

Какие у вас есть идеи? Сервер просто отправляет письма в те места, где их сразу помещают в спам. Я бы поступил так же, если бы кто-то прислал мне 2 тысячи писем за 1 секунду.

Используйте авторитетную службу отправки почты.

Если вы размещаете собственный SMTP-сервер, вы сталкиваетесь с типичными связанными с этим проблемами. Компании, занимающиеся доставкой почты, такие как Mailgun и SendGrid, используют множество методов для обеспечения доверия к своим серверам и их восприятия как надежных сетями получателей. Именно поэтому в документации рекомендуется использовать один из этих продуктов вместо самостоятельного хостинга.

Точно — хотя вы отправляете такие сообщения всплесками, авторитетные сторонние службы отправки почты могут надежно доставлять сотни тысяч писем в сторонние почтовые ящики каждый час.

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

Со SMTP всё в порядке, включая DMARC, SPF и DKIM. Я использую собственный SMTP с 2005 года. В то время не было этих бесполезных сервисов «деньгоделательных машин». Давайте представим, что завтра кто-то попытается взимать плату за воздух…


Итак, вернёмся к проблеме. Я знаю, что самый лёгкий путь для старшего тестировщика — перенаправить меня куда-то или предложить что-то платное. Не мог бы кто-нибудь помочь с исправлением критической ошибки в Discourse? Я всё ещё не согласен с тем, что Discourse должен отправлять 10 000 писем в секунду. Должен быть сервис ротации или что-то подобное, которое нормализует «last_digest_timestamp» между аккаунтами.

Я не работаю в CDCK и не имею финансовой заинтересованности в том, чтобы направлять вас к каким-либо сторонним сервисам.

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

Это не проблема Discourse. Дело в том, что IP-адрес вашего почтового сервера не считается надежным. Мы не можем помочь вам это исправить, а вы отказываетесь рассматривать существующие для этого варианты.

Значит ли это, что вы согласны на обработку 10 тысяч символов за секунды в Discourse?

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

Ваши потребности в отправке электронной почты, по-видимому, теперь превышают вашу экспертизу в работе с протоколом для надёжной доставки больших объёмов писем. Именно для этого существуют сервисы транзакционной рассылки. Здесь никто не рекламирует «крупную почтовую инфраструктуру» — речь просто о сложности доставки писем в большом объёме.

Вы можете настроить свой почтовый сервер так, чтобы он удерживал письма и распределял их отправку. Это действительно проблема вашего почтового сервера, а не Discourse. Я управлял почтовыми серверами с начала 1990-х годов примерно до 2005 года, когда спам сделал это слишком сложным. Сейчас это гораздо сложнее.

Удачи

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

Да, потому что они используют сервис, о котором вы упоминали ранее. Вы всё ещё не понимаете разницы между этими сервисами и личным SMTP-сервисом. Они используют огромный пул IP-адресов и имитируют разных отправителей. Это хорошая техника для компаний, занимающихся «жёстким» спамом. Конечно, они платят за этот сервис.

Я не вижу причин, почему люди должны использовать эти «машины для зарабатывания денег» для Discourse, если Discourse не отправляет спам. Ой… извините… из-за бага он может отправить 100 тысяч писем в понедельник за 1 секунду, потому что @Stephensays утверждает, что это ПРАВИЛЬНОЕ поведение.


Ладно, я не вижу смысла общаться с людьми, у которых на голове корона :crown:. Да, Discourse — это круто, и большое спасибо за ваш вклад.

Я надеюсь, что простые люди без :crown: найдут здесь какие-то идеи.

Согласно ответам команды Discourse выше, они не видят никаких проблем в работе Discourse. Я решил эту проблему не совсем чистым способом, напрямую изменив базу данных. Вот моё решение:

cd /var/discourse 
./launcher enter app
rails c
Topic.exec_sql("UPDATE users SET last_emailed_at = now() + interval '30' second * id WHERE last_emailed_at > ('2020-03-14'::date) AND last_emailed_at < ('2020-03-17'::date)")

Пожалуйста, обновите диапазон last_emailed_at в SQL-запросе. У меня было 4 тыс. записей last_emailed_at за один день — 16 марта. Таким образом, теперь все пользователи оптимизированы с интервалом в 30 секунд на протяжении 3 дней.

Discourse не предназначен для использования с личным SMTP-сервисом. Извините, что это не было объяснено чётко; он, безусловно, может работать, но для сообщества с регулярной почтовой активностью это не лучшая идея. Это ограничение, обусловленное текущим состоянием электронной почты, и мы все реагируем на него по мере возможности. :slight_smile: