О платформе Войти
← К списку версий
v0.88.0 01.10.2026 MINOR
Гейт получателя: буфер писем больше не пишет тем, кому писать нельзя
ТЗ 268 «На production уходят письма не тем клиентам». Найдена и устранена первопричина: команда email:send-prepared отправляла всё, что лежит в буфере со статусом queued, не проверяя текущий статус клиента — адрес в письме был снимком на момент подготовки, а не текущими данными клиента. Теперь перед отправкой проверяется, что клиент активен, имеет статус «В работе», не отписался от email-рассылки и что адрес письма всё ещё входит в список его адресов; иначе письмо снимается в статус «Отменено» с причиной в admin_notes и не отправляется. Генераторы месячных писем mail:send-monthly и email:generate-upcoming тоже переведены на Client::emailActive, поэтому клиентам в корзине и на проверке письма больше не создаются вовсе.
Что сделано
  • Проверка получателя при отправке - В email:send-prepared добавлена проверка получателя: письмо без клиента, со статусом клиента не «В работе», с is_active=false, с отказом от email-рассылки или с адресом to_email, которого больше нет среди адресов клиента (clients.email и clients.emails), снимается со статусом «Отменено». Причина отмены записывается в служебное поле письма и видна в админке.
  • Меньше лишних писем - mail:send-monthly и email:generate-upcoming выбирают клиентов через Client::emailActive — то есть «В работе», активные, не отписавшиеся и с заполненным адресом. Раньше месячные письма готовились в том числе клиентам в корзине и на проверке.
  • Покрытие - Добавлены 14 тестов: 9 на гейт отправки (включая отмену при удалённом клиенте и при адресе, вышедшем из списка) и 5 на генераторы (активный клиент получает письмо, корзина, проверка и отказ — не получают).
Что важно знать
  • Косается только получателя - Содержимое писем, отбор задач, отчёты за период и календарь отчётов не менялись: правка касается только того, кому письмо имеет право уйти.
  • Снятые письма не удаляются - Отменённое письмо остаётся в буфере со статусом «Отменено» и причиной — его видно в админке, при необходимости его можно вернуть в очередь вручную.
  • Пустые адреса - У клиента без единого адреса любое подготовленное письмо снимается: отправлять письмо, адрес которого не подтверждён ни одним адресом клиента, нельзя.
Результат
  • Письмо уходит клиенту только тогда, когда он прямо сейчас активен, находится в работе, не отписался и письмо адресовано на его действующий адрес. Всё остальное снимается с объяснением причины, а не отправляется вслепую.