Описать проблему ↗

PHP и Laravel

Laravel не отправляет почту через очередь

Письма Laravel поставлены в очередь, но не приходят. Разделим проверку на выполнение задания и отправку сообщения почтовому серверу.

Редакция «починимсайт» · Обновлено · 3 мин. чтения

Что происходит и с чего начать

Если письмо отправляется в фоне, успешный ответ формы означает лишь, что приложение приняло задачу. Дальше worker должен подготовить письмо и передать его почтовому сервису. Поэтому тест прямой отправки и тест очереди проверяют разные пути. Начните с одной контролируемой заявки и её времени. Нужно выяснить, осталось ли задание ждать, завершилось ошибкой или было выполнено. Только после этого имеет смысл разбирать доставку сообщения в ящик получателя.

Что можно проверить самостоятельно

  1. Создайте одно тестовое уведомление и запишите время, тему и получателя. Посмотрите, появилась ли задача в нужной очереди и менялось ли её состояние.
  2. Сравните прямую тестовую отправку и уведомление через реальный сценарий сайта. Отметьте различие, но не считайте успешный прямой тест доказательством исправности фонового процесса.
  3. Проверьте список неудачных заданий и безопасную часть ошибки. Не повторяйте всю очередь без сверки: некоторые письма могли уйти до последующего сбоя обработки.

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

Разработчик сопоставляет конфигурацию веб-процесса и worker, проверяет шаблон и нужные данные. Принятие письма SMTP-сервером ещё не подтверждает попадание во входящие, поэтому дальше исследуют ответ почтового сервиса и фильтрацию получателя. Нужны отдельные состояния: подготовлено, передано на отправку, ошибка. Если все этапы называются одним словом «отправлено», диагностика становится непрозрачной. Исправление должно позволять отличить остановленную очередь от недоставленного письма без изучения исходников при каждом повторении проблемы.

Что проверяет разработчик

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

  1. Проверьте, вызывается ли отправка и создаётся ли соответствующее задание. Уточните, какой mailer и queue connection выбраны фактически.
  2. Найдите задание у worker и его результат. Если синхронная отправка работает, сравните окружение веб-процесса и фонового исполнителя.
  3. Сверьте применённую конфигурацию после изменения SMTP. Перезапуск веба не обязательно обновляет настройки уже работающего worker.

На что обратить внимание

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

Как исправляют причину

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

Как убедиться, что проблема решена

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

Пройдите исходный сценарий и дождитесь выполнения задания. Проверьте получателя, содержание и количество писем. Затем убедитесь, что worker продолжает работать после обновления конфигурации предусмотренным способом. Для старых задач согласуйте повтор только действительно недоставленных сообщений. Устранение ошибки не должно сопровождаться неожиданной массовой рассылкой давно неактуальных уведомлений клиентам, которые уже получили результат другим способом.