Почтовые события в Битрикс позволяют отправлять уведомления при различных действиях (регистрация, заказ, форма обратной связи). Однако стандартных полей не всегда хватает. В этой статье разберём, как добавлять собственные поля и изменять существующие.
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. Через почтовые шаблоны в админке
-
Перейдите в Маркетинг → Рассылки → Почтовые шаблоны.
-
Выберите или создайте шаблон.
-
В тексте шаблона используйте новые поля, например:
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) и проверить добавленные поля через логирование.
Рекомендация:
Если вам нужно добавить сложную логику (например, выборку данных из БД), лучше вынести её в отдельный метод класса, чтобы не перегружать обработчик.