События почтовой системы Битрикс

Модуль расширенного управления меню для битрикс

Февраль 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");
    }
}

/*
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;
    }
}

См. также:

← Переход к списку