Для добавления рассылок в модуле 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