Перейти к содержимому

Как отправить письмо из битрикс

  • автор:

Отправка писем по API Bitrix

отправка писем bitrix

1С-Битрикс

Задача: Отправить письмо через API Bitrix

Довольно часто необходимо отправлять письма администратору, а что делать, если использовать не очень хороший компонент веб-форм нет возможности или желания? Правильно! Будем слать все через API

Итак, первое, что необходимо сделать — создать почтовое событие и почтовый шаблон.

Переходим в Настройки -> Настройки продукта -> Почтовые и СМС события -> Типы событий

Жмакаем — «Добавить тип» в моем примере — заполняю так:

Тип события: QUICK_ORDER

Вид события: Почтовое событие

Сохраняем и переходим в Переходим в Настройки -> Настройки продукта -> Почтовые и СМС события ->Почтовые шаблоны.

Жмакаем — «Добавить шаблон» в моем примере — заполняю так:

Тип почтового события: QUICK_ORDER

Выбираем сайт и язык.

От кого:#DEFAULT_EMAIL_FROM#

Кому: %email кому будет приходить письмо%

Тема: Быстрый заказ

Новое сообщение с сайта #SITE_NAME#!

Имя клиента: #CUSTOMER_NAME#
Телефон клиента: #CUSTOMER_PHONE#

Детали заказа:
#ORDER_DETAIL#

Теперь к обработчику:

 htmlspecialcharsEx($_POST['customer_name']), "CUSTOMER_PHONE" => htmlspecialcharsEx($_POST['customer_phone']), "ORDER_DETAIL" => htmlspecialcharsEx($_POST['order_detail']), ); $result = CEvent::Send($EVENT_TYPE, $SITE_ID, $arFeedForm ); echo json_encode($result); 

Я использую ajax для формы, поэтому у меня в ответ летит json.

Как видите, ключи в массиве arFeedForm выступают маркерами в сообщении. Вот и все! Если вы сделали все правильно, но при следующей отправке формы Вы получите письмо на почту.

Отправка почты средствами битрикс

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

Отправка писем средствами системы 1С-Битрикс. при помощи класса «\Bitrix\Main\Mail\Event».

Отправка простого сообщения по почтовому событию «USER_INFO» для сайта «s1» по расписанию:

 \Bitrix\Main\Mail\Event::send(array( 
"EVENT_NAME" => "USER_INFO",
"LID" => "s1",
"C_FIELDS" => array(
"EMAIL" => "test@mysite.ru",
"USER_ID" => 235
),
));

Отправка простого сообщения по почтовому событию «USER_INFO» для сайта «s1» (мгновенная):

 \Bitrix\Main\Mail\Event::sendImmediate(array( 
"EVENT_NAME" => "USER_INFO",
"LID" => "s1",
"C_FIELDS" => array(
"EMAIL" => "test@mysite.ru",
"USER_ID" => 235
),
));

Мгновенная отправка на почту отправленного на сервер файла вложением:

 $fileId = false; 
if(
$_FILES['file'])
$fileId = \CFile::SaveFile($_FILES['file'],"mailatt");

\Bitrix\Main\Mail\Event::sendImmediate(array( // or send
"EVENT_NAME" => "VM_SERVICE_REQUEST",
"LID" => "s2",
"C_FIELDS" => array(
"EMAIL" => $arCompany["PROPERTIES"]["EMAIL"]["VALUE"],
"COMPANY_NAME" => $arCompany["NAME"],
"MESSAGE" => $request->getPost("MESSAGE"),
"USER_NAME" => $USER->GetFullName(),
"USER_EMAIL" => $USER->GetEmail(),
),
"FILE" => array($fileId), // нужно сохранять сначала, из документации к CEvent::send: Массив id файлов, которые используются классом CFile. Либо можно передать массив абсолютных путей до файлов.
));

if(
$fileId)
CFile::Delete($fileId);
См. также:
  • Если почта не уходит с сайта
  • Отправка SMS средствами системы

Отправка почты

Основана на почтовых событиях. Отправка письма через инициацию почтового события:

$arEventFields = array( 'USER_TO' => 'email@site.ru', 'MESSAGE' => 'Mail text', 'SUBJECT' => 'Mail subject' ); $arrSite = 's1'; CEvent::Send('CUSTOM_MAIL_EVENT', $arrSite, $arEventFields, 'N');

‘N’ — чтобы не слать копию на «ящик для всех исходящих писем».

Если в шаблоне письма стоит сайт «en», а у нас текущий сайт «ru», письмо на «en» не отправится!
Протолкнуть не отправленные email \Bitrix\Main\Mail\EventManager::executeEvents();

Пример простой проверки отправки письма

$_SERVER["DOCUMENT_ROOT"] = dirname(__DIR__); // в каталоге 1 уровня (не корень) define("LANGUAGE_ID", "s1"); // ID сайта define("NO_KEEP_STATISTIC", true); define("NOT_CHECK_PERMISSIONS", true); require($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/prolog_before.php"); CModule::IncludeModule("iblock"); $eventName = "NEW_USER_CONFIRM"; // название события $arFields = array( 'EMAIL' => 'email@site.ru' ); $arrSite = 's1'; // ID сайта $event = new CEvent; $event->Send($eventName, $arrSite, $arFields, "N"); echo 'Done'.PHP_EOL;

Формирование тела письма

Кроме подстановок типа #USER_ID# в шаблоне компонента возможно использовать PHP-код:

EventMessageThemeCompiler::includeComponent( "bitrix:tasks.task.mail", "", array( "ID" => "", "RECIPIENT_ID" => "", "USER_ID" => "", "ENTITY" => "COMMENT", "ENTITY_ACTION" => "ADD", "URL" => "", "EMAIL_TO" => "" )); ?>

Отправка письма с вложением

CEvent::Send принимает шестым параметром массив id файлов

// файл, который будет приложен к письму $filePath = '/path/to/file.txt'; $fileId = CFile::SaveFile( array( "name" => "filename.txt", // имя файла, как оно будет в письме // "size" => filesize($filePath), // работает и без указания размера "tmp_name" => $filePath, // собственно файл // "type" => "", // тип, не ясно зачем "old_file" => "0", // ID "старого" файла "del" => "N", // удалять прошлый? "MODULE_ID" => "", // имя модуля, работает и так "description" => "", // описание // "content" => "содержимое файла" // если указать, то вместо файла будет указанный текст ), 'mails', // относительный путь от upload, где будут храниться файлы false, // ForceMD5 false // SkipExt ); $event = new CEvent; $event->SendImmediate($eventName, $arrSite, $arFields, "N", '', array($fileId)); // отправляем немедленно (так как файл будет удален(?)) CFile::Delete($fileId); // удаляем файл

Send

Метод создает почтовое событие которое будет в дальнейшем отправлено в качестве E-Mail сообщения. Возвращает идентификатор созданного события. Статический метод.

Параметры
Параметр Описание С версии
event Идентификатор типа почтового события.
lid Идентификатор сайта, либо массив идентификаторов сайта.
fields Массив полей типа почтового события идентификатор которого задается в параметре event_type. Массив имеет следующий формат: array(«поле»=>»значение» [, . ]).
duplicate Отправить ли копию письма на адрес указанный в настройках главного модуля в поле «E-Mail адрес или список адресов через запятую на который будут дублироваться все исходящие сообщения«.
Необязательный. По умолчанию «Y».
message_id Идентификатор почтового шаблона по которому будет отправлено письмо.
Если данный параметр не задан, либо равен «», то письма будут отправлены по всем шаблонам привязанным к типу почтового события, идентификатор которого задается в параметре event_type, а также привязанных к сайту(ам) идентификатор которого указан в параметре site.
Необязательный. По умолчанию — «».
3.1.7
files Массив идентификаторов файлов, которые используются классом CFile. Либо можно передать массив абсолютных путей до файлов.

Если передать в files массив абсолютных путей, то система скопирует файл, и создаст запись в таблице b_event.
Если вы, например, сохраняете файл в инфоблок, и передаете в CEvent::Send путь к файлу вместо id, то файл будет сохранен еще раз.
При передаче файла через CEvent::Send имя файла будет хэшем независимо от настроек главного модуля, поэтому, что бы в письме было нормальное имя файла, нужно всегда передавать массив идентификаторов.

Смотрите также

Примеры использования

 $CONTRACT_ID, "MESSAGE" => $mess, "EMAIL_TO" => implode(",", $EMAIL_TO), "ADMIN_EMAIL" => implode(",", $ADMIN_EMAIL), "ADD_EMAIL" => implode(",", $ADD_EMAIL), "STAT_EMAIL" => implode(",", $VIEW_EMAIL), "EDIT_EMAIL" => implode(",", $EDIT_EMAIL), "OWNER_EMAIL" => implode(",", $OWNER_EMAIL), "BCC" => implode(",", $BCC), "INDICATOR" => GetMessage("AD_".strtoupper($arContract["LAMP"]."_CONTRACT_STATUS")), "ACTIVE" => $arContract["ACTIVE"], "NAME" => $arContract["NAME"], "DESCRIPTION" => $description, "MAX_SHOW_COUNT" => $arContract["MAX_SHOW_COUNT"], "SHOW_COUNT" => $arContract["SHOW_COUNT"], "MAX_CLICK_COUNT" => $arContract["MAX_CLICK_COUNT"], "CLICK_COUNT" => $arContract["CLICK_COUNT"], "BANNERS" => $arContract["BANNER_COUNT"], "DATE_SHOW_FROM" => $arContract["DATE_SHOW_FROM"], "DATE_SHOW_TO" => $arContract["DATE_SHOW_TO"], "DATE_CREATE" => $arContract["DATE_CREATE"], "CREATED_BY" => $CREATED_BY, "DATE_MODIFY" => $arContract["DATE_MODIFY"], "MODIFIED_BY" => $MODIFIED_BY ); $arrSITE = CAdvContract::GetSiteArray($CONTRACT_ID); CEvent::Send("ADV_CONTRACT_INFO", $arrSITE, $arEventFields); ?>

Новинки документации в соцсетях:

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *