Блог специалистов
09.12.2019

Как в 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"]);
    }
}


Количество показов: 5411




Возврат к списку