Блог Горошко Андрея 1C-Битрикс Отправка почты в D7: Класс Bitrix\Main\Mail\Event

Отправка почты в D7: Класс Bitrix\Main\Mail\Event

Средний рейтинг
Еще нет оценок

Мы уже рассматривали 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.

Мой рейтинг:

Добавить комментарий

Related Post

Обработка изображений в D7: Класс Bitrix\Main\File\ImageОбработка изображений в D7: Класс Bitrix\Main\File\Image

Средний рейтинг Еще нет оценок Для простого создания миниатюр в шаблонах идеально подходит CFile::ResizeImageGet. Но если вам нужно наложить водяной знак, маску, повернуть изображение или сохранить результат в конкретный файл —

Валидация данных в D7 ORM: Встроенные и кастомные валидаторыВалидация данных в D7 ORM: Встроенные и кастомные валидаторы

Средний рейтинг Еще нет оценок Валидация — это процесс проверки данных на корректность перед их сохранением. D7 ORM предоставляет мощный механизм валидаторов, который описывается прямо в getMap() вашей сущности. Это позволяет держать

Локализация в Битрикс: Правильная работа с языковыми файлами (GetMessage и Loc::getMessage)Локализация в Битрикс: Правильная работа с языковыми файлами (GetMessage и Loc::getMessage)

Средний рейтинг 5 из 5 звезд. 1 голосов. Жестко «зашивать» текстовые строки (заголовки, названия кнопок, сообщения) прямо в код — плохая практика. Это затрудняет перевод сайта на другие языки и