Если email-рассылка останавливается посередине, проблема обычно не в одном адресе, а в управлении очередью. Worker может завершиться на исключении, упереться в квоту провайдера или оставить кампанию в состоянии running без возможности продолжить.

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

Что сделать в первую очередь

  • Остановите повторный запуск кампании, чтобы не отправить первые письма заново.
  • Сохраните текущие статусы получателей и позицию очереди.
  • Проверьте квоту, rate limit и доступность SMTP.
  • Найдите первую постоянную или временную ошибку после остановки.

Почему возникает проблема

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

  • Исключение одного адреса завершает весь batch.
  • Провайдер временно ограничил скорость или дневной объем.
  • Worker убит по памяти, таймауту или во время деплоя.
  • Статус кампании обновляется отдельно от транзакции очереди.

Пошаговая диагностика

  • Сверьте sent, failed, pending и accepted по журналам приложения и SMTP.
  • Проверьте время жизни worker и потребление памяти на больших шаблонах.
  • Разделите ответы 4xx для retry и 5xx для постоянного отказа.
  • Проверьте блокировку кампании и heartbeat фонового процесса.
  • Запустите малую тестовую партию на разрешенных адресах.

Как исправить

Исправляйте подтвержденную первопричину и сохраняйте возможность отката. После каждого изменения повторяйте один и тот же контрольный сценарий, чтобы не спутать результат нескольких правок.

  • Обрабатывайте каждого получателя независимо и сохраняйте результат атомарно.
  • Добавьте ограниченный retry с backoff только для временных ошибок.
  • Учитывайте rate limit и отправляйте контролируемыми партиями.
  • Возобновляйте кампанию только с pending, не меняя уже sent.
  • Добавьте watchdog для зависшего состояния running без heartbeat.

Как проверить результат

  • Тестовая кампания завершается при наличии одного неверного адреса.
  • Перезапуск продолжает очередь без повторной отправки успешным получателям.
  • Статусы приложения соответствуют accepted, bounce и delivered провайдера.

Как не допустить повторения

  • Мониторьте скорость, размер pending и возраст старейшего письма.
  • Проверяйте лимиты провайдера до старта крупной кампании.
  • Разделяйте маркетинговые и транзакционные очереди.

Частые вопросы

Можно ли просто перезапустить рассылку?

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

Почему accepted не означает delivered?

SMTP принял письмо в обработку, но окончательная доставка или bounce могут прийти позже.

Когда стоит обратиться за помощью

Для диагностики нужны обезличенные статусы очереди, коды SMTP и настройки worker. Список адресов получателей и содержимое писем обычно не требуются.

Итог

Надежная рассылка продолжает работу после локальной ошибки и не отправляет письмо повторно. Я могу исправить очередь, retry, статусы доставки и мониторинг кампаний.