<?
// Функции. Можно вынести в дpугой файл.
class html_mime_mail {
var $headers;
var $multipart;
var $mime;
var $html;
var $parts = array();
var $images = array(); /*makRo: Добавлен, массив картинок*/
function html_mime_mail($headers="") { //MIME and mail header
$this->headers=$headers;
}
function add_html($html="") {
$this->html.=$html;
}
function build_html($orig_boundary,$kod) {
$this->multipart.="--$orig_boundary\n";
if ($kod=='w' || $kod=='win' || $kod=='windows-1251') $kod='windows-1251';
else $kod='koi8-r';
$this->multipart.="Content-Type: text/html; charset=$kod\n";
$this->multipart.="BCC: del@ipo.spb.ru\n";
$this->multipart.="Content-Transfer-Encoding: Quot-Printed\n\n";
$this->multipart.="$this->html\n\n";
}
function add_attachment($path="", $name = "", $c_type="application/octet-stream") {
if (!file_exists($path.$name)) {
print "File $path.$name dosn't exist.";
return;
}
$fp=fopen($path.$name,"r");
if (!$fp) {
print "File $path.$name coudn't be read.";
return;
}
$file=fread($fp, filesize($path.$name));
fclose($fp);
$this->parts[]=array("body"=>$file, "name"=>$name,"c_type"=>$c_type);
}
function build_part($i) {
$message_part="";
$message_part.="Content-Type: ".$this->parts[$i]["c_type"];
if ($this->parts[$i]["name"]!="")
$message_part.="; name = \"".$this->parts[$i]["name"]."\"\n";
else
$message_part.="\n";
$message_part.="Content-Transfer-Encoding: base64\n";
$message_part.="Content-Disposition: attachment; filename = \"".
$this->parts[$i]["name"]."\"\n\n";
$message_part.=chunk_split(base64_encode($this->parts[$i]["body"]))."\n";
return $message_part;
}
function build_message($kod) {
$boundary="=_".md5(uniqid(time()));
$this->headers.="MIME-Version: 1.0\n";
$this->headers.="Content-Type: multipart/mixed; boundary=\"$boundary\"\n";
$this->multipart="";
$this->multipart.="This is a MIME encoded message.\n\n";
for ($i=(count($this->parts)-1); $i>=0; $i--)
$this->multipart.="--$boundary\n".$this->build_part($i);
/* makRo: Добавлен FOR, обработка картинок */
for ($i=(count($this->images)-1); $i>=0; $i--) {
$this->multipart.="--$boundary\n".$this->build_image($i);
$this->html = str_replace("{".$this->images[$i]["html_name"]."}", "cid:".$this->images[$i]["content_id"], $this->html);
}
$this->build_html($boundary,$kod);
$this->mime = "$this->multipart--$boundary--\n";
}
function send($server, $to, $from, $subject="", $headers="") {
$headers="To: $to\nFrom: $from\nSubject: $subject\nX-Mailer: The Mouse!\n$headers";
$fp = fsockopen($server, 25, &$errno, &$errstr, 30);
if (!$fp)
die("Server $server. Connection failed: $errno, $errstr");
fputs($fp,"HELO $server\n");
fputs($fp,"MAIL FROM: $from\n");
fputs($fp,"RCPT TO: $to\n");
fputs($fp,"DATA\n");
fputs($fp,$this->headers);
if (strlen($headers))
fputs($fp,"$headers\n");
fputs($fp,$this->mime);
fputs($fp,"\n.\nQUIT\n");
while(!feof($fp))
$resp.=fgets($fp,1024);
fclose($fp);
}
/*........................................................................................*/
/*........................................................................................*/
/* makRo: Добавлены перечисленные ниже функции */
function build_image($i)
{
$message_image="";
$message_image.="Content-Type: ".$this->images[$i]["c_type"];
if ($this->images[$i]["name"]!="")
$message_image.="; name = \"".$this->images[$i]["name"]."\"\n";
else
$message_image.="\n";
$message_image.="Content-Transfer-Encoding: base64\n";
$message_image.="Content-ID: <".$this->images[$i]["content_id"].">\n\n";
$message_image.=chunk_split(base64_encode($this->images[$i]["body"]))."\n";
return $message_image;
}
function add_image($image_html_name , $file_path , $c_type="image/jpeg")
{
if (!file_exists($file_path)) {
print "File $file_path dosn't exist.";
return;
}
$fp=fopen($file_path,"r");
if (!$fp) {
print "File $file_path coudn't be read.";
return;
}
$file=fread($fp, filesize($file_path));
fclose($fp);
$name = basename($file_path);
$content_id = "this_id_".md5(uniqid(time()));
$this->images[]=array("body"=>$file, "name"=>$name,"c_type"=>$c_type, "html_name"=>$image_html_name, "content_id"=> $content_id);
}
/*........................................................................................*/
/*........................................................................................*/
}
// *************************************************************************
//
// В качестве аттача пpисоединяем html-письмо (открывается автоматически).
// Второй аттач - некоторый файл из каталога.
// Вот так вызывать все то, что написано выше:
//
// *************************************************************************
$mail=new html_mime_mail();
/* makRo: Добавленны html-теги и атрибуты картинок, в качестве src используется в последующем замещаемая строка в {скобках} */
$mail->add_html("<html><body><center><h2>Пpивет!<br><br>".
"<br>Посылаю двоичный файл [/bin/ls] ...</h2>".
"А это моё фото <img src=\"{MY_FOTO}\" alt=\"Моё фото\"><br>".
"А это фото моей подружки ;-) <img src=\"{MYGIRL_FOTO}\" alt=\"Моя любимая\"><br>".
"</center></body></html>");
$mail->add_attachment("/bin/","ls");
/* makRo: Функция добавления картинок */
$mail ->add_image("MY_FOTO" , "/www/my.jpg");
$mail ->add_image("MYGIRL_FOTO" , "/www/myGirl.jpg");
$mail->build_message('win'); // если не "win", то кодиpовка koi8
$mail->send('ПОЧТОВЫЙ_ХОСТ_ВАШЕГО_ПРОВАЙДЕРА', //Реальная строка - в www-руководстве
'КОМУ_(E-MAIL)',
'ОТ_КОГО_(E-MAIL)',
'ТЕМА ПИСЬМА');
?>