Отправить письмо с прикрепленными файлами | PHP mail with Attachment

Отправить письмо с прикрепленными файлами | PHP mail with Attachment


freelanceland
Удаленная работа для начинающих и профессионалов
Как отправить письмо с прикреплеными файлами PHP mail() /  How to send email with attachments PHP mail ().

 * Отправка письма с прикреплением файлов
* @param $mailTo - кому отправляем письмо
* @param $From - от кого придет письмо
* @param $subjectText - тема письма
* @param $message - сообщение письма
* @param array $arFiles - массив $_FILS http://php.net/manual/ru/reserved.variables.files.php
* @param array $arFilesStream - массив файлов в формате array('NAME' => 'Agreement.pdf','CONTENT' => $pdfStream,)
* @var string $pdfStream - поток файла
* @return bool
*/
function sendMailAttachment($mailTo, $From, $subjectText, $message, $arFiles=array(), $arFilesStream=array()){

$to = $mailTo;

$EOL = "\r\n"; // ограничитель строк, некоторые почтовые сервера требуют \n - подобрать опытным путём
$boundary = "--".md5(uniqid(time())); // любая строка, которой не будет ниже в потоке данных.

$subject= '=?windows-1251?B?' . base64_encode($subjectText) . '?=';

$headers = "MIME-Version: 1.0;$EOL";
$headers .= "Content-Type: multipart/mixed; boundary=\"$boundary\"$EOL";
$headers .= "From: $From\nReply-To: $From\n";

$multipart = "--$boundary$EOL";
$multipart .= "Content-Type: text/html; charset=windows-1251$EOL";
$multipart .= "Content-Transfer-Encoding: base64$EOL";
$multipart .= $EOL; // раздел между заголовками и телом html-части
$multipart .= chunk_split(base64_encode($message));

if(count($arFiles)>0){
foreach($arFiles["file"]["name"] as $key => $value){
$filename = $arFiles["file"]["tmp_name"][$key];
$file = fopen($filename, "rb");
$data = fread($file, filesize( $filename ) );
fclose($file);
$NameFile = $arFiles["file"]["name"][$key]; // в этой переменной надо сформировать имя файла (без всякого пути);
$File = $data;
$multipart .= "$EOL--$boundary$EOL";
$multipart .= "Content-Type: application/octet-stream; name=\"$NameFile\"$EOL";
$multipart .= "Content-Transfer-Encoding: base64$EOL";
$multipart .= "Content-Disposition: attachment; filename=\"$NameFile\"$EOL";
$multipart .= $EOL; // раздел между заголовками и телом прикрепленного файла
$multipart .= chunk_split(base64_encode($File));
}
}

if(count($arFilesStream)>0){
foreach ($arFilesStream as $value){
$NameFile = $value['NAME'];
$File = $value['CONTENT'];

$multipart .= "$EOL--$boundary$EOL";
$multipart .= "Content-Type: application/octet-stream; name=\"$NameFile\"$EOL";
$multipart .= "Content-Transfer-Encoding: base64$EOL";
$multipart .= "Content-Disposition: attachment; filename=\"$NameFile\"$EOL";
$multipart .= $EOL; // раздел между заголовками и телом прикрепленного файла
$multipart .= chunk_split(base64_encode($File));
}
}

$multipart .= "$EOL--$boundary--$EOL";

return mail($to, $subject, $multipart, $headers);
}
 

Также читают

Изменение размера изображения средствами PHP. ResizeImage. Convert imageType
Запуск только одной копии скрипта: PHP, CRON
Затраченная память PHP | memory_get_usage

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