Бортовой журнал Ктулху

Отправка почты через почтовые события в Битриксе

В битриксе существет эпичный способ отправки почты, включающий в себя почтовое событие и почтовый шаблон.

Каждый почтовый шаблон привязывается к определенному типу почтового события. Тип определяет набор специальных полей (placeholder’ов), которые могут быть использованы в почтовом шаблоне. В момент создания почтового события (т.е. готового сообщения) эти поля будут инициализированы конкретными значениями.

 

Почтовое событие

Создать почтовое событие можно через административный интерфейс: Настройки продукта > Почтовые события > Типы почтовых событий > добавить тип.

c5975ae4aa

Добавляем плейсхолдеры.

c1435faf39

Это переменные, которые используются в шаблоне, в которые можно передать ID пользователя и email получателя.

То же при помощи API:

<?
$obEventType = new CEventType;
$obEventType->Add(array(
 "EVENT_NAME" => "NEW_USER",
 "NAME" => "Новый пользователь",
 "SITE_ID" => "ru",
 "DESCRIPTION" => "
 #USER_ID# - ID пользователя
 #LOGIN# - Логин
 #NAME# - Имя пользователя
 #EMAIL# - Эл. адрес пользователя
 "
 ));
?>

Почтовый шаблон

6765691b57

В шаблоне можно увидеть те же самые плейсхолдеры. Данные в них будут передаваться из того места где вызывается событие.

API:

<?
$arr["ACTIVE"] = "Y";
$arr["EVENT_NAME"] = "NEW_USER";
$arr["SITE_ID"] = array("ru","en");
$arr["EMAIL_FROM"] = "
 Этот адрес электронной почты защищен от спам-ботов. У вас должен быть включен JavaScript для просмотра.
 ";
$arr["EMAIL_TO"] = "
 Этот адрес электронной почты защищен от спам-ботов. У вас должен быть включен JavaScript для просмотра.
 ";
$arr["BCC"] = "";
$arr["SUBJECT"] = "Новый пользователь - #ID#";
$arr["BODY_TYPE"] = "text";
$arr["MESSAGE"] = "
На сайте был зарегистрирован новый пользователь.
ID: #USER_ID#
Логин: #LOGIN#
Имя: #NAME#
Почта: #EMAIL#
";
$obTemplate = new CEventMessage;
$obTemplate->Add($arr);
?>

Вызов почтового события

Вызов выглядит примерно так:

$arEventFields = array(
 'EMAIL_TO' => COption::GetOptionString("main", "email_from"), // email админа в настройках главного модуля
 );
 CEvent::Send("USER_REGISTER", SITE_ID, $arEventFields);

USER_REGISTER - название типа почтового события.

SITE_ID - ID текущего сайта.

$arEventFields - массив с параметрами.

Полный набор параметров выглядит так:

 $arEventFields = array(
 "ID" => $CONTRACT_ID,
 "MESSAGE" => $mess,
 "EMAIL_TO" => implode(",", $EMAIL_TO),
 "ADMIN_EMAIL" => implode(",", $ADMIN_EMAIL),
 "ADD_EMAIL" => implode(",", $ADD_EMAIL),
 "STAT_EMAIL" => implode(",", $VIEW_EMAIL),
 "EDIT_EMAIL" => implode(",", $EDIT_EMAIL),
 "OWNER_EMAIL" => implode(",", $OWNER_EMAIL),
 "BCC" => implode(",", $BCC),
 "INDICATOR" => GetMessage("AD_".strtoupper($arContract["LAMP"]."_CONTRACT_STATUS")),
 "ACTIVE" => $arContract["ACTIVE"],
 "NAME" => $arContract["NAME"],
 "DESCRIPTION" => $description,
 "MAX_SHOW_COUNT" => $arContract["MAX_SHOW_COUNT"],
 "SHOW_COUNT" => $arContract["SHOW_COUNT"],
 "MAX_CLICK_COUNT" => $arContract["MAX_CLICK_COUNT"],
 "CLICK_COUNT" => $arContract["CLICK_COUNT"],
 "BANNERS" => $arContract["BANNER_COUNT"],
 "DATE_SHOW_FROM" => $arContract["DATE_SHOW_FROM"],
 "DATE_SHOW_TO" => $arContract["DATE_SHOW_TO"],
 "DATE_CREATE" => $arContract["DATE_CREATE"],
 "CREATED_BY" => $CREATED_BY,
 "DATE_MODIFY" => $arContract["DATE_MODIFY"],
 "MODIFIED_BY" => $MODIFIED_BY
 );

В данном случае нужно только добавить две переменных которые присутствуют в шаблоне: USER_ID и EMAIL_TO.

$arEventFields = array(
 'EMAIL_TO' => COption::GetOptionString("main", "email_from"), // email админа в настройках главного модуля
 "USER_ID" => $arResult['VALUES']['USER_ID'] // это передаем в шаблон 
 );
 CEvent::Send("USER_REGISTER", SITE_ID, $arEventFields, N, 42);

Также можно увидеть два новых параметра метода CEvent::Send: N и 42.

N - не уверен, но вроде бы запрещает дублирование на адрес админа.

42 - ID шаблона.

API:

<?
$eventName = 'NEW_USER';
$arFields = Array(
 "USER_ID" => 1,
 "LOGIN" => 'myLogin',
 "NAME" => 'Rustam',
 "EMAIL" => '
 Этот адрес электронной почты защищен от спам-ботов. У вас должен быть включен JavaScript для просмотра.
 ';
 );
$event = new CEvent;
$event->Send($eventName, SITE_ID, $arFields, "N");
?>

http://yournet.kz/blog/bitrix/pochtovaya-sistema-bitrix