Метод CEvent::CheckEvents() предназначен для ручной обработки очереди почтовых событий в 1С-Битрикс. Обычно отправка писем происходит автоматически с помощью агентов или cron, однако в некоторых случаях требуется самостоятельно запустить обработку очереди. Именно для этого используется данный метод.
Хотя CEvent::CheckEvents() применяется значительно реже, чем CEvent::Send(), он может быть полезен при разработке собственных обработчиков, настройке cron, тестировании отправки писем и диагностике проблем с почтовой системой.
Как работает CEvent::CheckEvents()
После вызова CEvent::Send() письмо не отправляется сразу. Вместо этого в таблицу b_event добавляется запись с информацией о почтовом событии.
Затем агент Битрикс или cron периодически вызывает обработчик очереди, который отправляет накопившиеся письма.
Метод CEvent::CheckEvents() позволяет запустить эту обработку вручную без ожидания следующего запуска агента.
Синтаксис метода
CEvent::CheckEvents();
Метод не принимает параметров.
Также он ничего не возвращает.
Простейший пример
CEvent::CheckEvents();
После выполнения метода система попытается отправить все письма, находящиеся в очереди.
Когда использовать CEvent::CheckEvents()
При тестировании отправки писем.
После массового добавления почтовых событий.
В собственных cron-задачах.
Если агенты Битрикс отключены.
При разработке консольных скриптов.
Использование после создания события
Иногда необходимо не только добавить письмо в очередь, но и сразу выполнить его отправку.
После этого достаточно запускать данный файл по расписанию.
Обработка большого количества писем
Если на сайте ежедневно отправляются сотни или тысячи писем, использование очереди значительно снижает нагрузку на сервер.
В этом случае почтовые события сначала записываются в таблицу b_event, а затем постепенно обрабатываются методом CEvent::CheckEvents().
Именно поэтому большинство интернет-магазинов используют не CEvent::SendImmediate(), а стандартную очередь отправки.
Как проверить очередь писем
Все почтовые события находятся в таблице b_event.
SELECT *
FROM b_event
ORDER BY ID DESC;
Наиболее интересны следующие поля:
Поле
Описание
ID
Идентификатор события.
EVENT_NAME
Код почтового события.
DATE_INSERT
Дата создания.
SUCCESS_EXEC
Статус отправки.
Статусы отправки
Значение
Описание
Y
Письмо успешно отправлено.
N
Ошибка отправки.
F
Критическая ошибка.
Почему метод может не отправить письма
Не создан почтовый шаблон.
Отсутствует тип почтового события.
Некорректно настроен SMTP или sendmail.
Письмо уже обработано ранее.
В очереди отсутствуют новые события.
CEvent::CheckEvents() или CEvent::SendImmediate()?
Эти методы выполняют разные задачи.
Метод
Назначение
CEvent::Send()
Добавляет письмо в очередь.
CEvent::CheckEvents()
Обрабатывает очередь и выполняет отправку.
CEvent::SendImmediate()
Отправляет письмо сразу без использования очереди.
В большинстве проектов разработчики используют связку CEvent::Send() и автоматическую обработку очереди агентами. Вызов CEvent::CheckEvents() вручную требуется только в особых случаях.
Полезные рекомендации
Не вызывайте CEvent::CheckEvents() после каждого CEvent::Send() без необходимости — это увеличивает время выполнения скрипта.
Для сайтов с высокой посещаемостью лучше использовать cron вместо агентов.
Регулярно проверяйте таблицу b_event, если возникают проблемы с отправкой писем.
Используйте CEvent::SendImmediate() только тогда, когда письмо действительно должно быть отправлено без задержек.
Заключение
CEvent::CheckEvents() — служебный метод класса CEvent, предназначенный для ручной обработки очереди почтовых событий. В большинстве проектов его вызов выполняется автоматически агентами или cron, однако разработчики нередко используют этот метод при тестировании, создании собственных планировщиков задач и настройке серверов. Понимание принципов работы очереди почтовых событий значительно упрощает поиск ошибок и позволяет грамотно организовать отправку писем в проектах на 1С-Битрикс.