• Модуль: mail
  • Путь к файлу: ~/bitrix/modules/mail/classes/general/mail.php
  • Класс: CAllMailMessage
  • Вызов: CAllMailMessage::addAttachment
static function addAttachment($arFields)
{
	global $DB;

	$arFields['FILE_NAME'] = trim($arFields['FILE_NAME']);

	$strSql = "SELECT ID, MAILBOX_ID, ATTACHMENTS FROM b_mail_message WHERE ID=".intval($arFields["MESSAGE_ID"]);
	$dbr = $DB->Query($strSql, false, "File: ".__FILE__."
Line: ".__LINE__); if(!($dbr_arr = $dbr->Fetch())) return false; $n = intval($dbr_arr["ATTACHMENTS"])+1; if (empty($arFields['FILE_NAME'])) { $arFields['FILE_NAME'] = sprintf( '%u-%u-%u.%s', $dbr_arr['MAILBOX_ID'], $dbr_arr['ID'], $n, mb_strpos($arFields['CONTENT_TYPE'], 'message/') === 0 ? 'msg' : 'file' ); } if(is_set($arFields, "CONTENT_TYPE")) $arFields["CONTENT_TYPE"] = mb_strtolower($arFields["CONTENT_TYPE"]); if(mb_strpos($arFields["CONTENT_TYPE"], "image/") === 0 && (!is_set($arFields, "IMAGE_WIDTH") || !is_set($arFields, "IMAGE_HEIGHT")) && is_set($arFields, "FILE_DATA")) { $filename = CTempFile::GetFileName(md5(uniqid("")).'.tmp'); CheckDirPath($filename); if(file_put_contents($filename, $arFields["FILE_DATA"]) !== false) { $img_arr = CFile::GetImageSize($filename); $arFields["IMAGE_WIDTH"] = $img_arr? $img_arr[0]: 0; $arFields["IMAGE_HEIGHT"] = $img_arr? $img_arr[1]: 0; } } if(is_set($arFields, "FILE_DATA") && !is_set($arFields, "FILE_SIZE")) $arFields["FILE_SIZE"] = strlen($arFields["FILE_DATA"]); $file = array( 'name' => md5($arFields['FILE_NAME']), 'size' => $arFields['FILE_SIZE'], 'type' => $arFields['CONTENT_TYPE'], 'content' => $arFields['FILE_DATA'], 'MODULE_ID' => 'mail' ); if (!($file_id = CFile::saveFile($file, 'mail/attachment'))) { CMail::option('attachment_failure', true); return false; } CMail::option('attachment_failure', false); unset($arFields['FILE_DATA']); $arFields['FILE_ID'] = $file_id; $ID = $DB->add('b_mail_msg_attachment', $arFields); if ($ID > 0) { $strSql = 'UPDATE b_mail_message SET ATTACHMENTS = ' . $n . ' WHERE ID = ' . intval($arFields['MESSAGE_ID']); $DB->query($strSql, false, 'File: '.__FILE__.'
Line: '.__LINE__); try { BitrixMailHelperAttachmentStorage::registerAttachment(array( 'FILE_ID' => $arFields['FILE_ID'], 'FILE_NAME' => $arFields['FILE_NAME'], 'FILE_SIZE' => $arFields['FILE_SIZE'], )); } catch (Exception $e) { Application::getInstance()->getExceptionHandler()->writeToLog($e); } } return $ID; }