Февраль 21, 2020
Теги: Основное
События почтовой системы Битрикс при отправке писем и создании почтового события.
Событие при отправке писем, когда письмо уже сформировано из шаблона:
namespace Partner;
\Bitrix\Main\EventManager::getInstance()->addEventHandler(
'main',
'OnBeforeMailSend',
'\Partner\CustomMail::onBeforeMailSend'
);
class CustomMail
{
function onBeforeMailSend(\Bitrix\Main\Event $event)
{
$mailParams = $event->getParameter(0);
define("ERROR_EMAIL", "");
\SendError(print_r($mailParams,true)."\n\n");
// модифицируем $mailParams
$result = new \Bitrix\Main\EventResult(\Bitrix\Main\EventResult::SUCCESS, $mailParams);
return $result;
}
}
/*
Array
(
[TO] => my@site.ru
[SUBJECT] => Тема письма
[BODY] => <b>Содержимое письма</b>
[HEADER] => Array
(
[From] => my@site.ru
[Reply-To] => my@site.ru
[X-EVENT_NAME] => SALE_ORDER_DELIVERY
)
[CHARSET] => UTF-8
[CONTENT_TYPE] => html
[MESSAGE_ID] => 2203.44 (21.02.2020 17:36:49)
[ATTACHMENT] =>
[TRACK_READ] =>
[TRACK_CLICK] =>
[LINK_PROTOCOL] =>
[LINK_DOMAIN] => site.ru
[CONTEXT] => Bitrix\Main\Mail\Context Object
(
[category:protected] =>
[smtp:protected] =>
[priority:protected] =>
)
)
*/
Изменение или добавление полей при добавлении почтового события (этот код не будет работать при использовании sendImmediate)
namespace Partner;
\Bitrix\Main\EventManager::getInstance()->addEventHandler(
'main',
'\Bitrix\Main\Mail\Internal\Event::OnBeforeAdd',
'\Partner\MailCustom::onBeforeAdd'
);
class MailCustom
{
function onBeforeAdd(\Bitrix\Main\Entity\Event $event)
{
$fields = $event->getParameter("fields");
if($fields['EVENT_NAME']!='SALE_ORDER_DELIVERY') // модифицируем только конкретное почтовое событие
return;
$cFields = $fields['C_FIELDS'];
$cFields['MY_NEW_FIELD'] = "значение"; // добавляем собственное поле (макрос)
$result = new \Bitrix\Main\Entity\EventResult();
$changedFields = array(
'C_FIELDS' => $cFields,
);
$result->modifyFields($changedFields);
return $result;
}
}