Прикрепить файл в письмо вебформы битрикс

Вариант 1

<?
AddEventHandler("main", "OnBeforeEventAdd", array("MailEventHandler", "onBeforeEventAddHandler"));

class MailEventHandler
{
static function onBeforeEventAddHandler(&$event, &$lid, &$arFields, &$message_id, &$files)
{

if ($event === 'FORM_FILLING_SIMPLE_FORM_4' && $message_id === '119') {

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)
{
// Укажите https или 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"]);
}

}
?>

Вариант 2

<?php
class Feedback
{
    public static $events = [
        'FORM_FILLING_SIMPLE_FORM_1',
    ];

    public static function onBeforeEventAddHandler(&$event, &$lid, &$arFields, &$message_id, &$files)
    {
        if (in_array($event, static::$events)) {
            if (!is_array($files)) $files = [];
            foreach ($arFields as $key => $field) {
                if ($arLink = self::getLinkFromField($field)) {
                    if ($arFiles = self::getFileFromLink($arLink)) {
                        $files[] = $arFiles;
                    }
                }
            }
        }
    }

    public static function getLinkFromField($field)
    {
        //preg_match("/(https?\:.*form_show_file.*action\=download)/", $field, $out);
        preg_match_all("/(https?\:.*form_show_file.*action\=download)/", $field, $out);
        return ($out[1] ?: false);
    }

    public static function getFileFromLink($arLink)
    {
        $arFiles = [];
        foreach($arLink as $link)
        {
            $uri = new \Bitrix\Main\Web\Uri($link);
            parse_str($uri->getQuery(), $query);
            $arFile = static::GetFileByHash($query["rid"], $query["hash"]);
            $arFiles[] = $arFile["FILE_ID"];
        }
        return $arFiles;
    }


    protected static function GetFileByHash($RESULT_ID, $HASH)
    {
        global $DB, $APPLICATION, $strError, $USER;

        $err_mess = (\CAllFormResult::err_mess()) . "
Function: GetAnswerFile
Line: ";

        $RESULT_ID = intval($RESULT_ID);
        if ($RESULT_ID <= 0 || strlen(trim($HASH)) <= 0) return;

        $strSql = "
        SELECT
            F.ID as FILE_ID,
            F.FILE_NAME,
            F.SUBDIR,
            F.CONTENT_TYPE,
            F.HANDLER_ID,
            F.FILE_SIZE,
            RA.USER_FILE_NAME ORIGINAL_NAME,
            RA.USER_FILE_IS_IMAGE,
            RA.FORM_ID, R.USER_ID
        FROM b_form_result R
        LEFT JOIN b_form_result_answer RA ON RA.RESULT_ID=R.ID
        INNER JOIN b_file F ON (F.ID = RA.USER_FILE_ID)
        WHERE R.ID = '" . $RESULT_ID . "'
        AND RA.USER_FILE_HASH = '" . $DB->ForSql($HASH, 255) . "'
        ";

        $z = $DB->Query($strSql, false, $err_mess . __LINE__);
        if ($zr = $z->Fetch()) {
            return $zr;
        } else {
            return false;
        }
    }
}
AddEventHandler("main", "OnBeforeEventAdd",[Feedback::class,"onBeforeEventAddHandler"]);
?>

Вариант 3

Повесить на добавление результатов:

<?php
function onBeforeResultAddHandler($WEB_FORM_ID,&$arFields,&$arrVALUES){
    $input_id = "";
    switch($WEB_FORM_ID){//id вебформы
        case 5:
        $input_id = 62;//id ответа, где будут ссылки на файлы
        break;
    }
    if(!empty($_FILES) && $input_id!=""){
            $files = reset($_FILES);
            foreach($files["name"] as $id=>$name){
                $arFile = array(
                "name" => $name,
                "tmp_name" => $files["tmp_name"][$id],
                "type" => $files["type"][$id],
                "MODULE_ID"=>"form",
                "size"=>$files["size"][$id]
                );

                $res = CFile::SaveFile($arFile,"form_result");//сохраняем файлы и создаем массив ссылок на них
                if($res){
                    $arFiles[] = "https://www.bwt.ru".CFile::GetPath($res);
                }
            }
            $arrVALUES["form_text_".$input_id] = implode("; ",$arFiles);
        }
    return true;
}
?>

Полезные ссылки

https://dev.1c-bitrix.ru/community/webdev/user/114106/blog/9787/