- Модуль: 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;
}