@IgorRastarov

Как отправить файл методом CEvent::Send в битрикс?

Всем привет. Подскажите, пожалуйста, по - поводу отправки файлов в письмах в битрикс через cevent::send
У меня обычный компонент обратной связи, использующий почтовый шаблон. У меня есть инфоблок со свойством BLANK. Это свойство типа файл. Мне нужно отправлять его в письме. Я в init.php пишу:
AddEventHandler("iblock", "OnAfterIBlockElementAdd", "OnAfterIBlockElementAddHandler");
    function OnAfterIBlockElementAddHandler(&$arFields)
    {     
        if($arFields["IBLOCK_ID"] == 8){ // 8 - это ID инфоблока
            $mailFields = array(
                "BLANK" => $arFields["PROPERTY_VALUES"]["98"], //BLANK - это свойство 8 инфоблока типа файл, 98 - его ID
            );
            echo CEvent::Send("PLAN_FEEDBACK", 's1', $mailFields); //PLAN_FEEDBACK - название почтового шаблона
        }

Содержмое почтового шаблона:
Вам было отправлено сообщение через форму обратной связи
E-mail: #AUTHOR_EMAIL#
Текст сообщения:
#TEXT#
#BLANK#
Сообщение сгенерировано автоматически.
На почту приходит Email и TEXT. Бланк не приходит.
Подскажите, как сделать ,чтобы файл тоже отправлялся.
Спасибо!
  • Вопрос задан
  • 16846 просмотров
Решения вопроса 1
@VladimirPortev
Скорее всего проблема в том, что у Вас в обработчике нет поля EMAIL_TO, а в почтовом шаблоне, скорее всего есть. Я тоже недавно столкнулся с похожей проблемой. Я не использовал никаких стандартных компонент битрикс. Обычная html форма. Вот мой код, может Вам поможет.

CModule::IncludeModule('iblock');
$arSelect = Array("NAME", "ID", "PROPERTY_IMAGE");
$arFilter = Array("IBLOCK_ID"=>15, "ACTIVE"=>"Y");
$res = CIBlockElement::GetList(Array(), $arFilter, false, Array(), $arSelect);
while($ob = $res->GetNextElement())
{
    $arFields = $ob->GetFields();
  if (!empty($arFields['PROPERTY_IMAGE_VALUE'])){	
    $arEventField = array(  
      "EMAIL_TO" => $_POST['email'],// - здесь email - это <input type="email" name="email" placeholder="E-mail" value="" required>
      "TEXT" => $_POST['textarea'],// - здесь textarea - это <input type="text" name="textarea" placeholder="Текст сообщения" value="">
    ); 
      $image=CFile::GetPath($arFields['PROPERTY_IMAGE_VALUE']);
    CEvent::Send("IMAGE_FEEDBACK", 's1', $arEventField,'Y',8,array(CFile::GetPath($arFields['PROPERTY_IMAGE_VALUE'])));
  }
}

Поля EMAIL_TO и TEXT - есть в моем почтовом шаблоне под номером 8 и с названием IMAGE_FEEDBACK
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
@Danbka
В документации же все написано: https://dev.1c-bitrix.ru/api_help/main/reference/c...

В вашем случае это будет приблизительно так:

CEvent::Send("PLAN_FEEDBACK", 's1', ['AUTHOR_EMAIL' => 'email@domain.com', 'TEXT' => 'text'], 'N', '', [$arFields["PROPERTY_VALUES"]["98"]]);


если в $arFields["PROPERTY_VALUES"]["98"] хранится ID файла.
Ответ написан
@Taurus
Рабочий пример
CEvent::Send('FORM_ID', 's1',
				array(
					'NAME' => $arValues['form_text_25'],
					'IMG' => '<img src="ПУТЬ К ИЗОБРАЖЕНИЮ">', // выводится в body письма #IMG#, например, https://домен_не_вызывающий_подозрений_с_тз_спама 
				),
				'N',
				'',
				array($_img) // $_img в данном случае путь к изображению на сервере (добавляется как аттач к письму, можно передавать несколько изображений, как элементы массива
			);
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы