[sender] API создания рассылки в модуле Email-маркетинг

Для добавления рассылок в модуле Email-маркетинг с помощью API привожу рабочий, самый свежий пример кода.

В комментариях есть еще различные примеры изменения полей рассылки, после успешного добавления рассылки выводится вот такое сообщение Success add letter: 19, можно приведенный код сохранить в php-файле и открыть в браузере, со значениями по дефолту рассылка должна добавиться сразу, если сегменты и компании уже созданы.

В вашем случае в приведенном примере надо будет указать свои Сегменты и Компании, они в админке в рассылках создаются заранее вручную, тут в коде подставляются сегменты и компании по дефолту:

  • Entity\Segment::getDefaultIds() - Сегменты (array)
  • Entity\Campaign::getDefaultId() - Компания (int)
<?php
define('STOP_STATISTICS', true);
define('BX_SECURITY_SHOW_MESSAGE', true);

//define('SITE_ID','s1');
require_once($_SERVER['DOCUMENT_ROOT'] . '/bitrix/modules/main/include/prolog_before.php');

use Bitrix\Main\Loader,
Bitrix\Sender\Entity,
Bitrix\Sender\Security;

if(!Loader::includeModule('sender')) {
return;
}


/** @var Entity\Letter $letter */
$letter = Entity\Letter::createInstanceById(0, array('mail', 'sms'));

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

$templateType = 'BASE';
$templateId = 'empty';
$segments = Entity\Segment::getDefaultIds();
$segments = $segments ? $segments : array(1);

//--------------------------------------------------------/
// Prepare letter
//--------------------------------------------------------/

$data = array(
'TITLE' => 'Тестовая рассылка',
'SEGMENTS_INCLUDE' => $segments,
//'SEGMENTS_EXCLUDE' => array(1,2,...),
'TEMPLATE_TYPE' => $templateType,
'TEMPLATE_ID' => $templateId,
'MESSAGE_CODE' => 'mail',
'IS_TRIGGER' => 'N',
);

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

//echo "<pre>";print_r($data);echo "</pre>";
//$letter->set('MESSAGE_CODE', 'mail');


//--------------------------------------------------------/
// Add message
//--------------------------------------------------------/

$subject = 'Тема письма';
$linkParams = CUtil::translit($subject, 'ru');

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

$cfg = array(
'SUBJECT' => $subject,
'MESSAGE' => '<html><body>Текст письма</body></html>',
'EMAIL_FROM' => 'Администратор <test@example.com>',
'PRIORITY' => '',
'LINK_PARAMS' => 'utm_source=newsletter&utm_medium=mail&utm_campaign=' . $linkParams,
'ATTACHMENT' => '',
'TEMPLATE_TYPE' => $templateType,
'TEMPLATE_ID' => $templateId,
);

foreach($configuration->getOptions() as $option) {
$key = $option->getCode();

if(array_key_exists($key, $cfg)) {
$value = $cfg[ $key ];
}

/*switch($code) {
case 'MESSAGE':
$value = str_replace('#MESSAGE#', $message, $baseConfig->getOption($code)->getValue());
break;
case 'SUBJECT':
$value = $arItem['~NAME'];
break;
case 'EMAIL_FROM':
$value = $baseConfig->getOption($code)->getValue();
break;
default:
$value = $baseConfig->getOption($code)->getValue();
}*/

$option->setValue($value);
}

/*
//Message field example #1
$option = $configuration->getOptionByType(Bitrix\Sender\Message\ConfigurationOption::TYPE_MAIL_EDITOR);
if($option) {
$message = str_replace('#MESSAGE#', $message, $option->getValue());
$option->setValue($message);
}

//Template field example #2
$letter->getMessage()->getConfiguration()->set('TEMPLATE_TYPE', $templateType);
$letter->getMessage()->getConfiguration()->set('TEMPLATE_ID', $templateId);
*/


//--------------------------------------------------------/
// Save letter
//--------------------------------------------------------/

$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 'Success add letter: ' . $letter->getId();
}
}
else{
implode('<br>', $result->getErrorMessages());
}


if($letter->hasErrors()) {
implode('<br>', $letter->getErrorMessages());
}
?>

Сильно комментировать не стал, вроде все минимально и понятно, можно использовать где-нибудь в init.php по событиям добавления новостей, статей и т.д.

Образец редактирования и добавления рассылки смотрите в этом файле

/bitrix/components/bitrix/sender.letter.edit/class.php
Имя *
Логин (мин. 3 символа)
E-mail *
*— обязательные для заполнения поля
Логин или e-mail
TUNING-SOFT.RU Разработка умных веб-сервисов