CEvent::SendImmediate() в Битрикс — мгновенная отправка писем без очереди
ОглавлениеЧем отличается CEvent::SendImmediate() от CEvent::Send()Синтаксис методаОписание параметровМинимальный примерОтправка письма после формы обратной связиОтправка кода подтвержденияОтправка уведомления администраторуИспользование определенного шаблонаПрикрепление файловЧто возвращает методКогда использовать CEvent::SendImmediate()Когда лучше использовать CEvent::Send()Распространенные ошибкиПолезные рекомендацииЗаключение
Метод CEvent::SendImmediate() используется в 1С-Битрикс для немедленной отправки электронного письма. В отличие от CEvent::Send(), который добавляет письмо в очередь и ожидает обработки агентом или cron, данный метод выполняет отправку сразу после вызова.
Этот способ особенно полезен в ситуациях, когда пользователь должен получить письмо мгновенно: код подтверждения, одноразовый пароль, уведомление об успешной оплате или сообщение администратору о новой заявке.
Чем отличается CEvent::SendImmediate() от CEvent::Send()
Основное отличие заключается в способе отправки письма.| Метод | Принцип работы |
|---|---|
| CEvent::Send() | Добавляет письмо в очередь (таблица b_event), после чего его отправляет агент или cron. |
| CEvent::SendImmediate() | Отправляет письмо сразу без ожидания обработки очереди. |
Синтаксис метода
CEvent::SendImmediate(
$event,
$lid,
$arFields,
$Duplicate = "Y",
$message_id = "",
$files = array(),
$languageId = ''
);
Параметры полностью совпадают с методом CEvent::Send().
Описание параметров
$event
Код почтового события."FEEDBACK"
$lid
Идентификатор сайта.SITE_ID
$arFields
Массив данных, которые будут доступны в почтовом шаблоне.$arFields = [
"NAME" => "Иван",
"EMAIL" => "ivan@mail.ru",
"MESSAGE" => "Здравствуйте!"
];
$Duplicate
Определяет поиск шаблонов на других сайтах."Y"
или
"N"
$message_id
Позволяет использовать конкретный почтовый шаблон.15
$files
Массив файлов для прикрепления к письму.$languageId
Необязательный параметр для выбора языка шаблона.Минимальный пример
CEvent::SendImmediate(
"FEEDBACK",
SITE_ID,
[
"NAME" => "Иван",
"EMAIL" => "ivan@mail.ru"
]
);
После выполнения метода письмо будет отправлено сразу.
Отправка письма после формы обратной связи
$arFields = [
"NAME" => $_POST["NAME"],
"PHONE" => $_POST["PHONE"],
"EMAIL" => $_POST["EMAIL"],
"MESSAGE" => $_POST["MESSAGE"]
];
CEvent::SendImmediate(
"FEEDBACK",
SITE_ID,
$arFields
);
Такой вариант подходит, если пользователь должен получить письмо сразу после отправки формы.
Отправка кода подтверждения
$code = rand(100000, 999999);
CEvent::SendImmediate(
"SMS_CODE",
SITE_ID,
[
"CODE" => $code,
"EMAIL" => $email
]
);
Часто используется при регистрации пользователей или двухфакторной авторизации.
Отправка уведомления администратору
CEvent::SendImmediate(
"ADMIN_NOTIFY",
SITE_ID,
[
"NAME" => $name,
"PHONE" => $phone,
"EMAIL" => $email
]
);
Администратор получит письмо сразу после отправки формы.
Использование определенного шаблона
CEvent::SendImmediate(
"FEEDBACK",
SITE_ID,
$arFields,
"N",
25
);
Прикрепление файлов
$fileId = CFile::SaveFile($_FILES["FILE"], "upload");
CEvent::SendImmediate(
"FEEDBACK",
SITE_ID,
$arFields,
"N",
"",
[$fileId]
);
Что возвращает метод
Метод возвращает логическое значение.true
или
false
Возврат true означает, что попытка отправки письма выполнена успешно. Если метод вернул false, следует проверить настройки почтовой системы и наличие почтового шаблона.
Когда использовать CEvent::SendImmediate()
- Отправка кода подтверждения.
- Двухфакторная авторизация.
- Восстановление пароля.
- Уведомление администратора о новой заявке.
- Подтверждение успешной оплаты.
- Срочные сервисные уведомления.
Когда лучше использовать CEvent::Send()
Если на сайте ежедневно отправляется большое количество писем, лучше использоватьCEvent::Send(). Очередь позволяет снизить нагрузку на сервер и избежать задержек при выполнении пользовательских запросов.
CEvent::SendImmediate() рекомендуется применять только для действительно важных писем, которые пользователь должен получить без задержек.
Распространенные ошибки
- Не создан тип почтового события.
- Отсутствует почтовый шаблон.
- Передан неверный
SITE_ID. - Не настроена отправка почты (SMTP или sendmail).
- Не переданы обязательные переменные шаблона.
Полезные рекомендации
- Не используйте
CEvent::SendImmediate()для массовых рассылок. - Для интернет-магазинов лучше оставлять стандартную очередь отправки через
CEvent::Send(). - Перед использованием метода обязательно убедитесь, что почтовый шаблон существует и привязан к нужному сайту.
- Проверяйте результат выполнения метода и ведите журнал ошибок при необходимости.
Заключение
CEvent::SendImmediate() позволяет отправить электронное письмо непосредственно во время выполнения PHP-скрипта, минуя очередь почтовых событий. Метод идеально подходит для отправки кодов подтверждения, уведомлений о важных действиях пользователя и других сообщений, которые должны быть доставлены без задержек. Однако при высокой нагрузке на сайт рекомендуется использоватьCEvent::Send(), поскольку очередь почтовых событий обеспечивает более эффективную обработку большого количества писем.