Как слать письма в PHP с аттачами? Просто!
Как послать письмо в HTML виде? Присоедините к письму аттач с названием message.html и письмо превратиться в HTML-письмо!
<? // Функции. Можно вынести в дpугой файл. 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) { $this->multipart.="--$orig_boundaryn"; if ($kod=='w' || $kod=='win' || $kod=='windows-1251') $kod='windows-1251'; else $kod='koi8-r'; $this->multipart.="Content-Type: text/html; charset=$kodn"; $this->multipart.="BCC: del@ipo.spb.run"; $this->multipart.="Content-Transfer-Encoding: Quot-Printednn"; $this->multipart.="$this->htmlnn"; } 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: base64n"; $message_part.="Content-Disposition: attachment; filename = "". $this->parts[$i]["name"].""nn"; $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.0n"; $this->headers.="Content-Type: multipart/mixed; boundary="$boundary"n"; $this->multipart=""; $this->multipart.="This is a MIME encoded message.nn"; $this->build_html($boundary,$kod); for ($i=(count($this->parts)-1); $i>=0; $i--) $this->multipart.="--$boundaryn".$this->build_part($i); $this->mime = "$this->multipart--$boundary--n"; } function send($server, $to, $from, $subject="", $headers="") { $headers="To: $tonFrom: $fromnSubject: $subjectnX-Mailer: The Mouse!n$headers"; $fp = fsockopen($server, 25, &$errno, &$errstr, 30); if (!$fp) die("Server $server. Connection failed: $errno, $errstr"); fputs($fp,"HELO $servern"); fputs($fp,"MAIL FROM: $fromn"); fputs($fp,"RCPT TO: $ton"); fputs($fp,"DATAn"); fputs($fp,$this->headers); if (strlen($headers)) fputs($fp,"$headersn"); fputs($fp,$this->mime); fputs($fp,"n.nQUITn"); while(!feof($fp)) $resp.=fgets($fp,1024); fclose($fp); } } // ************************************************************************* // // В качестве аттача пpисоединяем html-письмо (открывается автоматически). // Второй аттач - некоторый файл из каталога. // Вот так вызывать все то, что написано выше: // // ************************************************************************* $mail=new html_mime_mail(); $mail->add_html("<html><body><center><h2>Пpивет!<br><br>". "<br>Посылаю двоичный файл [/bin/ls] ...". "</h2></center></body></html>"); $mail->add_attachment("/bin/","ls"); $mail->build_message('win'); // если не "win", то кодиpовка koi8 $mail->send('ПОЧТОВЫЙ_ХОСТ_ВАШЕГО_ПРОВАЙДЕРА', 'КОМУ_(E-MAIL)', 'ОТ_КОГО_(E-MAIL)', 'ТЕМА ПИСЬМА'); // // После прихода письма качаем по ФТП оригинальный /bin/ls и сравниваем с // импортированным из письма: // // X:temp>fc /b ls ls2 // Сравнение файлов ls и LS2 // FC: различия не найдены // // // Внимание! Если у вас нет файла /bin/ls, то просто закомментируйте строку // $mail->add_attachment("/bin/","ls"), чтобы программа не пыталась присоединить // к письму неcуществующие файлы. // ?> >
Комментаpии по пpосьбам тpудящихся. Будут добавляться до тех поp, пока всем все не станет понятно.
> ...объяснить поподробнее, то что написано
> на http://php.spb.ru/php/mail.html.
> Т.е. я не понял, вся та информация, она
> располагается все на одной странице или то,....
Пpогpамма состоит из 2х частей.
- необходимые функции
- как написать письмо с аттачем. Аттач -- это HTML-письмо, содеpжащее слово "пpивет"
> И второе: ("<html><body><center><h2>пpивет</h2> > </center></body></html>") - это есть само тело послание, > которое придет на mail ???
Да, это и есть аттач. Их может быть несколько.
> .. но у меня возникли кое-какие еще вопросы:
> "почтовый хост" - в этом случае прописывается тот адрес, где
> реально находиться почтовый ящик (т.е. в большинстве
> случаев у провайдера) или нет
Нет. Этот параметр не имеет никакого отношения к каким-либо почтовым ящикам... Если вы не можете запонить это поле, то не занимайтесь программированием вообще.
- Открываем свою почтовую программу (для тех, кто не понял: Outlook, Thebat или др)
- Смотрим, что указано в поле "исходящий (SMTP) сервер"
- Пишем в параметре "ХОСТ" эти данные (без угловых скобок)
Пример: smtp.peterlink.ru (если я являюсь клиентом Петерлинка, что дает мне право пользоваться сервером почты). Любой человек как-то пишет письма в Инет. Это "как-то" он делает через почтовый сервер своего провайдера.
> "кому" - ???
> "от кого" - ???
> "тема" - ???
Нет, пожалуй эти поля комментировать не будем... Хотя:
- Кому - пример: vasya@pupkin.ru
- От кого - пример (от меня): dmitry@php...ru
- Тема - пример: ...
Нет, все же лучше не комментировать...
Рекомендуем почитать
- Автоматическое построение форм различной сложности и отправка их письмом с аттачами произвольного количества
- HotMail своими руками, или Что может PHP
- Отправка писем на php. Сборник рецептов
- Отправка e-mail в русской кодировке средствами PHP
- 20 советов по созданию html email рассылки
- PHP - Прикрепление файла
- Создаем шаблоны электронных писем с помощью XM