Назад

Как добавить или изменить поля в почтовых событиях Event Битрикс

Главная
Блог
Как добавить или изменить поля в почтовых событиях Event Битрикс

Почтовые события в Битрикс позволяют отправлять уведомления при различных действиях (регистрация, заказ, форма обратной связи). Однако стандартных полей не всегда хватает. В этой статье разберём, как добавлять собственные поля и изменять существующие.

1. Основной способ: обработчик OnBeforeEventAdd

Событие OnBeforeEventAdd вызывается перед отправкой почтового уведомления и позволяет модифицировать данные.

Пример кода

Добавим в /bitrix/php_interface/init.php:

AddEventHandler("main", "OnBeforeEventAdd", ["CustomMailHandler", "modifyFields"]);

class CustomMailHandler
{
    public static function modifiyFields(&$event, &$lid, &$arFields)
    {
        // Добавляем новое поле
        $arFields["NEW_FIELD"] = "Дополнительная информация";
        
        // Изменяем существующее поле (например, email)
        if (isset($arFields["EMAIL"])) {
            $arFields["EMAIL"] = mb_strtolower($arFields["EMAIL"]);
        }
        
        // Добавляем поле только для определённого события
        if ($event == "FEEDBACK_FORM") {
            $arFields["USER_IP"] = $_SERVER["REMOTE_ADDR"];
        }
    }
}

Как это работает?

  • $event – идентификатор почтового события (например, NEW_ORDER, FEEDBACK_FORM).

  • $lid – ID сайта (актуально для мультисайтовости).

  • $arFields – массив полей, которые можно изменять.

2. Альтернативные способы

2.1. Через почтовые шаблоны в админке

  1. Перейдите в Маркетинг → Рассылки → Почтовые шаблоны.

  2. Выберите или создайте шаблон.

  3. В тексте шаблона используйте новые поля, например:

    text


    Новое поле: #NEW_FIELD#

    Они подставятся, если добавлены в $arFields через обработчик.

2.2. Расширение компонентов форм

Если уведомление отправляется через компонент (например, форму обратной связи), можно добавить дополнительные поля через параметры компонента:

$APPLICATION->IncludeComponent(
    "bitrix:main.feedback",
    "",
    [
        "EMAIL_TO" => "admin@site.com",
        "EVENT_MESSAGE_ID" => [7],
        "OK_TEXT" => "Спасибо!",
        "REQUIRED_FIELDS" => ["NAME", "EMAIL", "NEW_FIELD"], // Новое поле
    ]
);

2.3. Использование OnBeforeMailSend

Если нужно изменить данные непосредственно перед отправкой, можно использовать:

AddEventHandler("main", "OnBeforeMailSend", ["CustomMailHandler", "beforeSend"]);

class CustomMailHandler
{
    public static function beforeSend(&$arFields, &$arTemplate)
    {
        $arFields["SITE_NAME"] = "Мой сайт";
    }
}

3. Как отлаживать изменения?

3.1. Логирование полей

Добавьте в обработчик запись в лог:

file_put_contents(
    $_SERVER['DOCUMENT_ROOT'] . '/log/mail_fields.log',
    print_r($arFields, true),
    FILE_APPEND
);

Или используйте AddMessage2Log($arFields, "mail_fields"); для просмотра в Администрирование → Журнал событий.

3.2. Проверка в шаблоне письма

Вставьте в тестовый шаблон:

text


<pre>#NEW_FIELD#</pre>

Если поле не выводится – проверьте, правильно ли оно добавлено в $arFields.

4. Полезные ссылки

Заключение

С помощью OnBeforeEventAdd можно легко расширять стандартные почтовые события в Битрикс. Главное – правильно определить идентификатор события ($event) и проверить добавленные поля через логирование.

Рекомендация:
Если вам нужно добавить сложную логику (например, выборку данных из БД), лучше вынести её в отдельный метод класса, чтобы не перегружать обработчик.

Нужен надежный исполнитель?
Разрабатываем сайты, выполняем миграцию на Битрикс, дорабатываем функционал, сопровождаем проекты, а также занимаемся поисковым продвижением и комплексным маркетингом
Получить консультацию
Читайте по теме
Все статьи
Нужен надежный исполнитель?
Разрабатываем сайты, выполняем миграцию на Битрикс, дорабатываем функционал, сопровождаем проекты, а также занимаемся поисковым продвижением и комплексным маркетингом
Получить консультацию
Все статьи