Отправка писем на PHP с несколькими вложениями

Отправка писем на PHP с несколькими вложениями

01.04.2013

Отправка письма с помощью функции php mail() дело нехитрое, но когда нужно отправить письмо с вложением и не одним? Нужно внимательно читать комментарии.

Скрипт отправки сообщения с несколькими вложениями был взят с сайта PHP.net и размещен для тех кто не нашел его в комментах:

function multi_attach_mail($to, $files, $sendermail){
$from = "Files attach <".$sendermail.">";//от кого
$subject = date("d.M H:i")." F=".count($files); //заголовок письма
$message = date("Y.m.d H:i:s")."
".count($files)." attachments"; //сообщениее (тело письма)
$headers = "From: $from";
 
// boundary
$semi_rand = md5(time());
$mime_boundary = "==Multipart_Boundary_x{$semi_rand}x";
 
// заголовки для вложения
$headers .= "
MIME-Version: 1.0
" . "Content-Type: multipart/mixed;
" . " boundary="{$mime_boundary}"";
 
// multipart boundary
$message = "--{$mime_boundary}
" . "Content-Type: text/plain; charset="iso-8859-1"
" .
"Content-Transfer-Encoding: 7bit

" . $message . "

";
 
// подготовка вложений
for($i=0;$i<count($files);$i++){
if(is_file($files[$i])){
$message .= "--{$mime_boundary}
";
$fp = @fopen($files[$i],"rb");
$data = @fread($fp,filesize($files[$i]));
@fclose($fp);
$data = chunk_split(base64_encode($data));
$message .= "Content-Type: application/octet-stream; name="".basename($files[$i]).""
" .
"Content-Description: ".basename($files[$i])."
" .
"Content-Disposition: attachment;
" . " filename="".basename($files[$i]).""; size=".filesize($files[$i]).";
" .
"Content-Transfer-Encoding: base64

" . $data . "

";
}
}
$message .= "--{$mime_boundary}--";
$returnpath = "-f" . $sendermail;
$ok = @mail($to, $subject, $message, $headers, $returnpath); //отправка сообщения
if($ok){ return $i; } else { return 0; }
}

Использовать эту функцию довольно просто:

$files = array();
//тут заносим файлы в массив например так:
//$files[0]= "/directory/filename.jpg"
//$files[1]= "/directory/css/my.css"
multi_attach_mail("email получателя", $files, "email отправителя"); //вызываем функцию

Вот и все, проще некуда, и не нужно изобретать велосипед.

Кстати, в комментариях можно также найти и другие полезные вещи.


Узнал сам - поделись с друзьями!

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