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

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

Это переменные, которые используются в шаблоне, в которые можно передать ID пользователя и email получателя.
То же при помощи API:
<?
$obEventType = new CEventType;
$obEventType->Add(array(
"EVENT_NAME" => "NEW_USER",
"NAME" => "Новый пользователь",
"SITE_ID" => "ru",
"DESCRIPTION" => "
#USER_ID# - ID пользователя
#LOGIN# - Логин
#NAME# - Имя пользователя
#EMAIL# - Эл. адрес пользователя
"
));
?>
Почтовый шаблон

В шаблоне можно увидеть те же самые плейсхолдеры. Данные в них будут передаваться из того места где вызывается событие.
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