Мы уже рассматривали CEvent::Send (старый метод).
В ядре D7 появился класс Bitrix\Main\Mail\Event, который делает отправку писем более объектно-ориентированной и гибкой.
Базовая отправка (send)
Этот метод создает запись в таблице b_event, которая будет обработана агентом (отложенная отправка).
use Bitrix\Main\Mail\Event;
$result = Event::send([
"EVENT_NAME" => "NEW_ORDER_INFO", // Тип почтового события
"LID" => "s1", // ID сайта
"C_FIELDS" => [ // Поля для замены #FIELD#
"ORDER_ID" => 123,
"USER_NAME" => "Иван",
"EMAIL_TO" => "client@example.com"
],
]);
if ($result->isSuccess()) {
echo "Письмо добавлено в очередь.";
}Немедленная отправка (sendImmediate)
Если письмо нужно отправить прямо сейчас (например, код восстановления пароля), используется метод sendImmediate. Он пытается отправить письмо через mail() (или SMTP) в рамках текущего хита.
use Bitrix\Main\Mail\Event;
$result = Event::sendImmediate([
"EVENT_NAME" => "USER_PASS_REQUEST",
"LID" => "s1",
"C_FIELDS" => [
"EMAIL" => "user@test.com",
"CODE" => "Af329"
],
]);
if ($result === "Y") { // sendImmediate возвращает 'Y' или 'N' (да, это странность легаси)
echo "Отправлено!";
}Отправка с вложениями (FILE)
D7 позволяет удобно прикреплять файлы к письму. В массив параметров нужно передать список ID файлов из таблицы b_file.
$fileId1 = 100;
$fileId2 = 101;
Event::send([
"EVENT_NAME" => "FEEDBACK_FORM",
"LID" => "s1",
"C_FIELDS" => ["TEXT" => "Сообщение с файлами"],
"FILE" => [$fileId1, $fileId2] // Массив ID файлов
]);Указание конкретного шаблона (MESSAGE_ID)
Если для события создано несколько шаблонов, но вы хотите использовать конкретный:
Event::send([
"EVENT_NAME" => "NEW_USER",
"LID" => "s1",
"C_FIELDS" => [...],
"MESSAGE_ID" => 25 // ID почтового шаблона
]);Вывод:
Класс Bitrix\Main\Mail\Event — это рекомендуемый способ работы с почтой в современном коде. Он принимает параметры в виде понятного массива и возвращает стандартизированный Result (в случае send).
Bitrix\Main\Mail\Event, отправка писем D7, CEvent::Send замена, sendImmediate, почтовые события, вложения в письмо D7.