Главная » Как слать письма в PHP с аттачами? Просто!
// Функции. Можно вынести в д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("Пpивет!

".
                  "
Посылаю двоичный файл [/bin/ls] ...".
                  "");
  $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ивет" пpивет> ") - это есть само тело послание,> которое придет на mail ??? Да, это и есть аттач. Их может быть несколько. "почтовый хост" - в этом случае прописывается тот адрес, где
> реально находиться почтовый ящик (т.е. в большинстве
> случаев у провайдера) или нет
Нет. Этот параметр не имеет никакого отношения к каким-либо почтовым ящикам... Если вы не можете запонить это поле, то не занимайтесь программированием вообще. Открываем свою почтовую программу (для тех, кто не понял: Outlook, Thebat или др) Смотрим, что указано в поле "исходящий (SMTP) сервер" Пишем в параметре "ХОСТ" эти данные (без угловых скобок) Пример: smtp.peterlink.ru (если я являюсь клиентом Петерлинка, что дает мне право пользоваться сервером почты). Любой человек как-то пишет письма в Инет. Это "как-то" он делает через почтовый сервер своего провайдера. "от кого" - ???
> "тема" - ???
Нет, пожалуй эти поля комментировать не будем... Хотя: Кому - пример: vasya@pupkin.ru От кого - пример (от меня): dmitry@php...ru Тема - пример: ... Нет, все же лучше не комментировать... google_ad_section_end--> Категория: Web технологии | Просмотров: 66