1138

Отправка писем с аттачами

Этот вопрос встречается очень часто на различных форумах. Хотя и ответов существует достаточно, что в большенстве они имеют ошибки. Если кто-то хоть раз задавался этим вопросом то скорее всего вы попадали на статью http://php.spb.ru/php/mail.html "Отправка писем с аттачами / html-страницами, через сокет, учет кодировок win koi dos". Я чуть переделал данный класс, добавил возможность выбора между HTML страницами и обычным текстом, а так же теперь не используются сокеты. class html_mime_mail { var $headers; var $multipart; var $mime; var $html; var $parts = array();function html_mime_mail($headers="") { $this->headers=$headers;}function add_html($html="") { $this->html.=$html;}function build_html($orig_boundary,$kod,$type="plain") { $this->multipart.="--$orig_boundary\n"; if ($kod=='w' || $kod=='win' || $kod=='windows-1251') $kod='windows-1251'; else $kod='koi8-r'; if ($type!="html" && $type!="plain") $type="plain"; $this->multipart.="Content-Type: text/$type; charset=$kod\n"; $this->multipart.="BCC: [email]del@ipo.spb.ru[/email]\n"; $this->multipart.="Content-Transfer-Encoding: Quot-Printed\n\n"; $this->multipart.="$this->html\n\n";}function add_attachment($file="", $name="", $c_type="application/octet-stream") { $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"; $this->build_html($boundary,$kod); for ($i=(count($this->parts)-1); $i>=0; $i--) $this->multipart.="--$boundary\n".$this->build_part($i); $this->mime = "$this->multipart--$boundary--\n";}function send($to, $from, $subject) { mail("$to", "$subject", $this->mime, "From: $from\r\n".$this->headers);}} $mail=new html_mime_mail(); $mail->add_html("HTML OR TEXT here"); $mail->add_attachment("/bin/","ls"); $mail->build_message('win'); // если не "win", то кодиpовка koi8 $mail->send('ПОЧТОВЫЙ_ХОСТ_ВАШЕГО_ПРОВАЙДЕРА', 'КОМУ_(E-MAIL)', 'ОТ_КОГО_(E-MAIL)', 'ТЕМА ПИСЬМА'); Модифицированный мною класс 100% работает. Так что претензии вида: ".. у меня не работает.." не принимаются (-;
0