Отправка писем с вложенными картинками на PHP
Главная → Статьи → Отправка писем с вложениями
Пример простой php-функции для отправки писем с картинками внутри.
<?php
/**
* отправка письма с вложениями
*
* @param string $from от кого
* @param string $to кому
* @param string $subject тема
* @param string $text собственно текст (html)
* @param string $cc копия
* @return unknown
*/
function multipart_mail($from, $to, $subject, $text,$cc=null) {
global $domain; //Не забудьте проинициализировать
$headers ="From: $from\n";
//$headers.="To: $to\n";
if (!is_null($cc)) {
$headers.="Cc: $cc\n";
}
//$headers.="Subject: $subject\n";
$headers.="Date: ".date("r")."\n";
$headers.="Return-Path: $from\n";
$headers.="X-Mailer: zm php script\n";
$headers.="MIME-Version: 1.0\n";
$headers.="Content-Type: multipart/alternative;\n";
$baseboundary="------------".strtoupper(md5(uniqid(rand(), true)));
$headers.=" boundary=\"$baseboundary\"\n";
$headers.="This is a multi-part message in MIME format.\n";
$message="--$baseboundary\n";
$message.="Content-Type: text/plain; charset=utf-8\n";
$message.="Content-Transfer-Encoding: 7bit\n\n";
$text_plain=str_replace('<p>',"\n",$text);
$text_plain=str_replace('<b>',"",$text_plain);
$text_plain=str_replace('</b>',"",$text_plain);
$text_plain=str_replace('<br>',"\n",$text_plain);
$text_plain= preg_replace('/<a(\s+)href="([^"]+)"([^>]+)>([^<]+)/i',"
\$4\n\$2",$text_plain);
$message.=strip_tags($text_plain);
//
$message.="\n\nIts simple text. Switch to HTML view!\n\n";
$message.="--$baseboundary\n";
$newboundary="------------".strtoupper(md5(uniqid(rand(), true)));
$message.="Content-Type: multipart/related;\n";
$message.=" boundary=\"$newboundary\"\n\n\n";
$message.="--$newboundary\n";
$message.="Content-Type: text/html; charset=utf-8\n";
$message.="Content-Transfer-Encoding: 7bit\n\n";
$message.=($text)."\n\n";
preg_match_all('/img(\s+)src="([^"]+)"/i',$text,$m);
if (isset($m[2])) {
$img_f=$m[2];
if (is_array($img_f)) {
foreach ($img_f as $k => $v) {
$img_f[$k]=str_ireplace($domain.'/','',$v);
}
}
}
$attachment_files=$img_f;
if (is_array($attachment_files)) {
foreach($attachment_files as $filename) {
$file_content = file_get_contents($filename,true);
$mime_type='image/png';
if(function_exists("mime_content_type")) {
$mime_type=mime_content_type($filename);
}
else {
switch (file_ext($filename)) {
case 'jpg': $mime_type='image/jpeg';break;
case 'gif': $mime_type='image/gif';break;
case 'png': $mime_type='image/png';break;
default:;
}
}
$message=str_replace($domain.'/'.$filename,'cid:'.basename($filename),$message);
$filename=basename($filename);
$message.="--$newboundary\n";
$message.="Content-Type: $mime_type;\n";
$message.=" name=\"$filename\"\n";
$message.="Content-Transfer-Encoding: base64\n";
$message.="Content-ID: <$filename>\n";
$message.="Content-Disposition: inline;\n";
$message.=" filename=\"$filename\"\n\n";
$message.=chunk_split(base64_encode($file_content));
}
}
$message.="--$newboundary--\n\n";
$message.="--$baseboundary--\n";
return mail($to, $subject, $message , $headers);
}
?>
Не забудьте проинициализировать глобальную переменную $domain.
Отправка письма с картинками и вложенными файлами
Второй вариант функции, поддерживающий отправку файлов.
<?php
/**
* отправка письма с вложениями
*
* @param string $from
* @param string $to
* @param string $subject
* @param string $text
* @param string $cc
* @param string $arr массив ассоциативных массивов с прикладываемыми файлами
* $arr[] = array(
type = тип mime,
name = имя файла (лучше английское),
content = содержимое файла закодированное base64_encode()
)
* @return unknown
*/
function multipart_mail($from, $to, $subject, $text,$cc=null,$arr=null) {
global $domain;
if($domain=='') $domain='http://'.$_SERVER['HTTP_HOST'];
$headers ="From: $from\r\n";
$headers.="To: $to\r\n";
if (!is_null($cc)) {
$headers.="Cc: $cc\r\n";
}
$headers.="Subject: $subject\r\n";
$headers.="Date: ".date("r")."\r\n";
$headers.="X-Mailer: zm php script\r\n";
$headers.="MIME-Version: 1.0\r\n";
$headers.="Content-Type: multipart/alternative;\r\n";
$baseboundary="------------".strtoupper(md5(uniqid(rand(), true)));
$headers.=" boundary=\"$baseboundary\"\r\n";
$headers.="This is a multi-part message in MIME format.\r\n";
$message="--$baseboundary\r\n";
$message.="Content-Type: text/plain; charset=windows-1251\r\n";
$text_plain=str_replace('<p>',"\r\n",$text);
$text_plain=str_replace('<b>',"",$text_plain);
$text_plain=str_replace('</b>',"",$text_plain);
$text_plain=str_replace('<br>',"\r\n",$text_plain);
$text_plain= preg_replace('/<a(\s+)href="([^"]+)"([^>]+)>([^<]+)/i'," \$4\n\$2",$text_plain);
$message.=strip_tags($text_plain);
//$message.="Content-Transfer-Encoding: 7bit\r\n\r\n";
$message.="\r\n\r\nIts simple text. Switch to HTML view!\r\n\r\n";
$message.="--$baseboundary\r\n";
$newboundary="------------".strtoupper(md5(uniqid(rand(), true)));
$message.="Content-Type: multipart/related;\r\n";
$message.=" boundary=\"$newboundary\"\r\n\r\n\r\n";
$message.="--$newboundary\r\n";
$message.="Content-Type: text/html; charset=windows-1251\r\n";
$message.="Content-Transfer-Encoding: 7bit\r\n\r\n";
$message.=($text)."\r\n\r\n";
preg_match_all('/img(\s+)src="([^"]+)"/i',$text,$m);
if (isset($m[2])) {
$img_f=$m[2];
if (is_array($img_f)) {
foreach ($img_f as $k => $v) {
$img_f[$k]=str_ireplace($domain,$_SERVER['DOCUMENT_ROOT'],$v);
}
}
}
$attachment_files=$img_f;
if (is_array($attachment_files)) {
foreach($attachment_files as $filename) {
$file_content = file_get_contents($filename,true);
$mime_type='image/png';
if(function_exists("mime_content_type")) {
$mime_type=mime_content_type($filename);
}
else {
switch (file_ext($filename)) {
case 'jpg': $mime_type='image/jpeg';break;
case 'gif': $mime_type='image/gif';break;
case 'png': $mime_type='image/png';break;
default:;
}
}
$message=str_replace($domain.'/'.$filename,'cid:'.basename($filename),$message);
$filename=basename($filename);
$message.="--$newboundary\r\n";
$message.="Content-Type: $mime_type;\r\n";
$message.=" name=\"$filename\"\r\n";
$message.="Content-Transfer-Encoding: base64\r\n";
$message.="Content-ID: <$filename>\r\n";
$message.="Content-Disposition: inline;\r\n";
$message.=" filename=\"$filename\"\r\n\r\n";
$message.=chunk_split(base64_encode($file_content));
}
if(!is_null($arr)){
foreach ($arr as $v) {
$mime_type=$v['type'];
$filename=$v['name'];
$message.="--$newboundary\r\n";
$message.="Content-Type: $mime_type;\r\n";
$message.=" name=\"$filename\"\r\n";
$message.="Content-Transfer-Encoding: base64\r\n";
$message.="Content-ID: <$filename>\r\n";
$message.="Content-Disposition: inline;\r\n";
$message.=" filename=\"$filename\"\r\n\r\n";
$message.=chunk_split($v['content']);
}
}
}
$message.="--$newboundary--\r\n\r\n";
$message.="--$baseboundary--\r\n";
return mail($to, $subject, $message , $headers);
}
?>
Используйте разумно и в меру!
Реклама:
Комментарии:
имя:
e-mail (не публикуется):
комментарий:
e-mail (не публикуется):
комментарий:
syntax error, unexpected T_VARIABLE