Очереди и письма
В iEXExchanger отправка писем и часть системных задач может выполняться через очереди.
Очереди позволяют системе не выполнять тяжёлые операции сразу во время действия пользователя, а передавать их в фоновую обработку.
Например, клиент создаёт заявку, система быстро показывает результат, а письмо клиенту или администратору отправляется отдельно в фоне.
Важное уведомление о почтовом драйвере
iEXExchanger использует стандартный почтовый механизм Laravel Framework, который работает через Symfony Mailer.
Это официальный механизм Laravel для отправки писем через SMTP, Resend и другие почтовые службы.
Разработчики iEXExchanger не изменяют внутренний код почтового драйвера Laravel.
Поэтому если при настройке почты возникают ошибки соединения, авторизации, SSL/TLS, timeout, блокировка порта или отказ почтового сервиса, чаще всего причина находится не в коде системы, а в настройках почтовой службы, сервера, DNS или очередей.
Перед обращением в поддержку проверьте:
SMTP host;
SMTP port;
тип шифрования;
логин и пароль;
пароль приложения;
e-mail отправителя;
SPF, DKIM и DMARC;
доступность портов
465и587на сервере;ограничения почтового провайдера;
работу очередей, если письма отправляются не сразу.
Если сервер не может подключиться к SMTP-службе, обратитесь в поддержку хостинга или сервера и попросите проверить исходящие подключения к нужному SMTP-хосту и порту.
Что такое очередь
Очередь — это механизм фоновой обработки задач.
Он позволяет системе выполнять часть операций не сразу, а отдельно от основного действия пользователя.
Например, пользователь создал заявку.
Система может:
сразу создать заявку;
показать пользователю результат;
отправить письмо позже через очередь;
отправить Telegram-уведомление в фоне;
выполнить пересчёт, экспорт или другую тяжёлую задачу отдельно.
Это помогает не замедлять сайт и панель управления.
Для чего очереди используются в iEXExchanger
В iEXExchanger очереди могут использоваться для разных задач:
отправка e-mail уведомлений;
отправка Telegram-уведомлений;
уведомления безопасности;
подтверждение e-mail;
уведомления о новых заявках;
уведомления администраторам;
экспорт заявок;
архивирование заявок;
пересчёт заявок;
пересчёт уровней клиентов;
обработка медиафайлов;
аналитика;
webhooks;
фоновые задачи модулей.
Поэтому параметр QUEUE_DRIVER влияет не только на письма, а на всю систему фоновых задач.
Где настраивается QUEUE_DRIVER
Параметр очереди настраивается на сервере в .env файле Backend.
Обычно файл находится в директории Backend-проекта:
Пример:
или:
После изменения .env обычно нужно очистить конфигурационный кеш и перезапустить процессы очередей.
Эти действия должен выполнять специалист, который обслуживает сервер.
Какие QUEUE_DRIVER доступны
В проекте доступны стандартные драйверы очередей Laravel:
В обычной эксплуатации чаще всего используются:
Для рабочего production-сервера рекомендуется:
Для диагностики или простого сервера можно временно использовать:
QUEUE_DRIVER=sync
sync означает, что задачи не ставятся в фоновую очередь, а выполняются сразу.
Например, если система должна отправить письмо, она будет пытаться отправить его прямо во время действия пользователя или администратора.
Когда sync полезен для проверки почты
Если письма не отправляются через Horizon, можно временно установить:
После этого отправьте тестовое письмо из панели управления.
Если при sync письмо отправилось, значит почтовые настройки рабочие, а проблема была в Redis, Horizon или обработчике очередей.
Если при sync письмо не отправилось, значит проблема не в Horizon, а в SMTP/API-настройках, DNS, пароле, портах или почтовом сервисе.
QUEUE_DRIVER=database
database означает, что задачи сохраняются в таблицу базы данных, а затем обрабатываются отдельным процессом очереди.
QUEUE_DRIVER=redis
redis — рекомендуемый режим для production-сервера.
В этом режиме задачи складываются в Redis и обрабатываются фоновыми процессами.
В iEXExchanger Horizon настроен именно для работы с Redis-очередями.
Что такое Horizon
Horizon — это официальный инструмент Laravel для управления Redis-очередями.
Он позволяет:
обрабатывать фоновые задачи;
смотреть очереди;
видеть ошибки задач;
отслеживать скорость выполнения;
контролировать нагрузку;
разделять задачи по приоритетам.
В iEXExchanger Horizon используется для обработки Redis-очередей.
Какие очереди слушает Horizon
В iEXExchanger Horizon может обрабатывать несколько очередей:
Простыми словами:
mail-high— важные e-mail уведомления;mail-low— менее срочные e-mail уведомления;default— обычные фоновые задачи;low— низкоприоритетные задачи;media— обработка медиафайлов;analytics— аналитические задачи;order-recount— задачи пересчёта заявок;presence— задачи присутствия и онлайн-статуса.
Когда Horizon нужен
Horizon нужен, если в .env указано:
В этом режиме фоновые задачи не выполняются сами по себе.
Их должен обрабатывать Horizon.
Если Horizon остановлен, письма и другие задачи могут не отправляться сразу, а будут ожидать обработки в очереди.
Когда Horizon можно не использовать
Horizon можно не использовать, если система работает в режиме:
В этом случае задачи выполняются сразу, без Redis и Horizon.
Но это простой или временный режим.
Для рабочего обменника с нормальной нагрузкой рекомендуется использовать:
и запущенный Horizon.
Как временно отключить Horizon для проверки почты
Если письма не отправляются и нужно понять, проблема в почтовых настройках или очереди, можно временно переключить очередь на sync.
В .env установите:
После этого:
Очистите конфигурационный кеш.
Перезапустите Backend, если используется кеш конфигурации.
Отправьте тестовое письмо из панели управления.
Проверьте результат.
Если письмо отправилось — почта настроена правильно, нужно проверять Redis, Horizon или queue worker.
Если письмо не отправилось — проблема в почтовых настройках, сервере, DNS или почтовом провайдере.
После проверки рекомендуется вернуть production-настройку:
SMART_NOTIFIER_QUEUE
В системе уведомлений есть отдельный параметр:
Он отвечает за то, будут ли уведомления SmartNotifier ставиться в очередь.
Если указано:
уведомления отправляются через очередь.
Если указано:
уведомления SmartNotifier отправляются сразу, без постановки в очередь.
Важно понимать разницу:
SMART_NOTIFIER_QUEUE влияет на уведомления.
QUEUE_DRIVER влияет на всю очередь Laravel в целом.
Разница между QUEUE_DRIVER и SMART_NOTIFIER_QUEUE
Рекомендуемые режимы
Для отключения очереди только у уведомлений
Можно использовать:
В этом случае уведомления SmartNotifier будут отправляться сразу.
Используйте этот вариант только если понимаете, зачем отключаете очередь именно для уведомлений.
Что происходит, если Horizon не работает
Если используется:
и Horizon остановлен, возможны такие симптомы:
тестовое письмо не приходит;
клиентские письма не отправляются;
уведомления администраторам не приходят;
задачи экспорта не выполняются;
архивирование не запускается;
пересчёты не обрабатываются;
фоновые задачи остаются в ожидании.
В этом случае проверьте:
запущен ли Redis;
запущен ли Horizon;
не упал ли процесс Horizon;
нет ли ошибок в логах;
не переполнены ли очереди;
правильно ли указан
QUEUE_DRIVER=redis.
Как понять, проблема в почте или в очереди
Какие ошибки не связаны с Horizon
Horizon не исправляет ошибки почтового сервиса.
Если SMTP или API-почта возвращает ошибку, нужно проверять настройки почты, DNS или сервера.
Например:
неверный пароль;
неправильный host;
неправильный port;
неверный SSL/TLS;
authentication failed;
relaying denied;
connection refused;
connection timeout;
sender address rejected;
domain not verified;
SPF/DKIM не настроены.
Horizon отвечает только за выполнение фоновых задач.
Он не меняет правила SMTP-провайдера и не исправляет ошибки авторизации или DNS.
Что лучше выбрать
Что не рекомендуется использовать
Пример настройки для production
При такой настройке:
задачи выполняются через Redis;
уведомления ставятся в очередь;
Horizon обрабатывает фоновые задачи;
неуспешные задачи сохраняются в таблицу failed jobs.
Пример настройки для диагностики почты
При такой настройке:
Horizon не нужен;
письма отправляются сразу;
проще увидеть ошибку SMTP/API;
удобно проверять Gmail, Яндекс Почту, Zoho Mail и Resend.
После проверки рекомендуется вернуть production-режим.
Пример настройки без очереди для уведомлений
При такой настройке:
остальные фоновые задачи могут работать через Redis;
уведомления SmartNotifier будут отправляться сразу;
Horizon продолжит обрабатывать другие очереди.
Используйте этот вариант только осознанно.
Краткая памятка
sync — задачи выполняются сразу, Horizon не нужен.
database — задачи сохраняются в базу, нужен queue:work.
redis — production-режим, нужен Redis и Horizon.
null — задачи не выполняются, для рабочего сайта не использовать.
SMART_NOTIFIER_QUEUE=false — отключает очередь только для уведомлений SmartNotifier.
QUEUE_DRIVER=sync — отключает фоновую очередь для всех Laravel-задач и выполняет их сразу.
Коротко
Для рабочего обменника рекомендуется использовать:
и запущенный Horizon.
Если письма не отправляются, временно переключите QUEUE_DRIVER на sync и отправьте тестовое письмо.
Если при sync письмо пришло — проблема в очередях, Redis или Horizon.
Если при sync письмо не пришло — проблема в настройках почты, DNS, сервере или почтовом провайдере.
Последнее обновление
Это было полезно?