Как в 1С-Битрикс прикрепить к письму файлы из шаблона почтового события при отправке
Прикрепить файл к письму в виде вложения в 1С-Битрикс. Задача, вроде и простая, и хочется просто иметь галочку в настройках для этого, но пока что такой галочки нет. Но тем, кто сталкивался с разработкой на Битриксе решить эту задачу совсем не сложно, имея готовое решение и ориентируясь немного в устройстве CMS Битрикс.
В общем, решение следующее. Мы отлавливаем по Типу почтового сообщения и ID Почтового шаблона письмо, где ищем ссылки на файлы и делаем их вложениями. Да, все так просто на словах. А на деле нам нужно добавить следующий код в файл /bitrix/php_interface/init.php:
Важно! Доступ к форме выбираем "Все пользователи". Доступ к статусу тоже выбираем "Все пользователи", иначе вложения не прикрепятся.
AddEventHandler("main", "OnBeforeEventAdd", array("MailEventHandler","onBeforeEventAddHandler"));
class MailEventHandler
{
static function onBeforeEventAddHandler(&$event, &$lid, &$arFields, &$message_id, &$files)
{
/* Тут пишем наш Тип почтового события и ID Почтового шаблона */
if ($event === 'FORM_FILLING_longorderorfile' && $message_id === '60') {
if (!is_array($files)) $files = [];
foreach ($arFields as $key => $field) {
if ($link = self::getLinkFromField($field)) {
if ($arFile = self::getFileFromLink($link)) {
$files[] = $arFile['FILE_ID'];
}
}
}
}
}
static function getLinkFromField($field)
{
/* Тут ищем ссылки на файл в нашем пиьсме. Обратите внимание, если у вас сайт работает на http, то надо и ниже написать http */
preg_match("/(https\:.*form_show_file.*action\=download)/", $field, $out);
return ($out[1] ?: false);
}
static function getFileFromLink($link)
{
$uri = new \Bitrix\Main\Web\Uri($link);
parse_str($uri->getQuery(), $query);
return CFormResult::GetFileByHash($query["rid"], $query["hash"]);
}
}
Количество показов: 5998