RTFM! статьи, советы, скрипты
::Заработок с помощью сайта ::JScript по-русски! ::Все русские мануалы::
МЕНЮ
О САЙТЕ
НОВОСТИ
СТАТЬИ
КНИГИ
АППЛЕТЫ
СВЯЗЬ

СЧЕТЧИКИ
Rambler's Top100
Рейтинг@Mail.ru
Яндекс цитирования

Как слать письма в PHP с аттачами? Просто!

Автор: Antonio Сайт: http://www.phpclub.net/     Рейтинг: N/A из 7       <<НАЗАД
   
   
   Как послать письмо в 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_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";
    $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($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);
    }
   }
   
   
   // *************************************************************************
   //
   // В качестве аттача п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х частей.
   
   1 - необходимые функции
   2 - как написать письмо с аттачем. Аттач -- это HTML-письмо, содеpжащее слово "пpивет"
   
   
   > И второе: ("<html><body><center><h2>пpивет</h2>
   > </center></body></html>") - это есть само тело послание,
   > которое придет на mail ???
   
   Да, это и есть аттач. Их может быть несколько.
   
   
   
   
   > .. но у меня возникли кое-какие еще вопросы:
   > "почтовый хост" - в этом случае прописывается тот адрес, где
   > реально находиться почтовый ящик (т.е. в большинстве
   > случаев у провайдера) или нет
   
   Нет. Этот параметр не имеет никакого отношения к каким-либо почтовым ящикам... Если вы не можете запонить это поле, то не занимайтесь программированием вообще.
   
   1. Открываем свою почтовую программу (для тех, кто не понял: Outlook, Thebat или др)
   2. Смотрим, что указано в поле "исходящий (SMTP) сервер"
   3. Пишем в параметре "ХОСТ" эти данные (без угловых скобок)
   
   Пример: smtp.peterlink.ru (если я являюсь клиентом Петерлинка, что дает мне право пользоваться сервером почты). Любой человек как-то пишет письма в Инет. Это "как-то" он делает через почтовый сервер своего провайдера.
   
   > "кому" - ???
   > "от кого" - ???
   > "тема" - ???
   
   Нет, пожалуй эти поля комментировать не будем...
   


<<НАЗАД      ОЦЕНИТЬ СТАТЬЮ    ВЕРСИЯ ДЛЯ ПЕЧАТИ>>
Статья прочитана :  раз.




пейкюлю



 
 
 
 
 
pauk ©® 2000-2015. All rights reserved.
При перепечатке ссылка на сайт и указание обязательны.
Мнение администрации сайта не всегда совпадает с мнением автора.
Орфография и пунктуация - авторские.
Администрация не несет никакой ответственности за использование материалов.
.
Protected by Copyscape DMCA Takedown Notice Infringement Search Tool