@roman_vo

Как получить письмо рассылки перед отправкой или готовую верстку с заполненными макросами?

Создан бизнес процесс, там есть активи, в нем есть выбор шаблона письма. После чего я создаю рассылку, но как можно после отправки вытащить готовое письмо или перед отправкой с заполненными макросами? Суть в том, что надо именно делать рассылку, а не отправлять письмо, но просто полученный шаблон (который найден по id на основании выбранного шаблона из формы), с не заполненными макросами.

То есть после отправки письма, срабатывает какое-то событие отправки, которое где-то получает готовое письмо с заполненными макросами, вопрос как его получить.

if (!Loader::includeModule('sender')) {
    return;
}
$message = '';
$mailingId = 1;
$subject = 'Тестовая тема';
$arrMailTmp = Bitrix\Sender\TemplateTable::onPresetTemplateList($templateType = null, $mailingId);
$mailTmp = $arrMailTmp[0]['FIELDS']['MESSAGE']['VALUE'];

$letter = Bitrix\Sender\Entity\Letter::createInstanceById($mailingId, array('mail'));

if (!$letter || !is_object($letter)) {
    ShowError(Security\AccessChecker::getMessage(Security\AccessChecker::ERR_CODE_NOT_FOUND));
}

$emailFrom = filter_var('1@yahoo.com', FILTER_VALIDATE_EMAIL);
$emailTo = filter_var('2@yahoo.com', FILTER_VALIDATE_EMAIL);

$data = array(
    'TITLE' => 'Тестовая рассылка',
    'TEMPLATE_ID' => $mailingId,
    'MESSAGE_CODE' => 'mail',
    'IS_TRIGGER' => 'N',
    'EMAIL_FROM' => $emailFrom,
    'EMAIL_TO' => $emailTo,
    'NAME' => '<html><body>Текст письма</body></html>',
);

//if(!$letter->getId()) {
//    $data['CAMPAIGN_ID'] = Entity\Campaign::getDefaultId();
//    $data['CREATED_BY']  = Security\User::current()->getId();
//}

$letter->mergeData($data);

$message = $letter->getMessage();
$configuration = $message->getConfiguration();

//$templateType = 'BASE';

$cfg = array(
    'SUBJECT' => $subject,
    'EMAIL_FROM' => $emailFrom,
//            'LINK_PARAMS'   => 'utm_source=newsletter&utm_medium=mail&utm_campaign=' . $linkParams,
    'ATTACHMENT' => '',
//    'TEMPLATE_TYPE' => $templateType,
    'TEMPLATE_ID' => $mailingId,
    'MESSAGE' => $mailTmp,
);

foreach ($configuration->getOptions() as $option) {

    $key = $option->getCode();
    if (array_key_exists($key, $cfg)) {
        $value = $cfg[$key];
        $option->setValue($value);
    }
}

$option = $configuration->getOptionByType(Bitrix\Sender\Message\ConfigurationOption::TYPE_MAIL_EDITOR);
//if ($option) {
//    $message = str_replace('#MESSAGE#', $message, $option->getValue());
//    $option->setValue($message);
//}
//$letter->getMessage()->getConfiguration()->set('TEMPLATE_TYPE', $templateType);
//$letter->getMessage()->getConfiguration()->set('TEMPLATE_ID', 1);

$result = $configuration->checkOptions();

if ($result->isSuccess()) {
    //Сохраняет настройки полей выпуска в таблицу b_sender_message_field
    $message->saveConfiguration($configuration);

    $letter->set('MESSAGE_ID', $configuration->getId());


    if ($letter->save()) {
        //Send mail
        $letter->getState()->send();

//        echo '<pre>'.print_r(,1).'</pre>';

        echo 'Success add letter: ' . $letter->getId();
    }
} else {
    implode('<br>', $result->getErrorMessages());
}

if ($letter->hasErrors()) {
    implode('<br>', $letter->getErrorMessages());
}
  • Вопрос задан
  • 134 просмотра
Пригласить эксперта
Ответы на вопрос 1
@Drayde
Вместо активити отправки письма добавьте блок php кода, который прокинет необходимые значения из БП в ваш класс. А там уже сверстайте шаблон, подставляйте в него значения и отправляйте.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы