Модераторы: skyboy, MoLeX, Aliance, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как слать письма в PHP с аттачами, Работа с e-mail 
:(
    Опции темы
DezmASter
Дата 21.4.2007, 21:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Дизайнер :)
***


Профиль
Группа: Участник
Сообщений: 1520
Регистрация: 3.2.2006
Где: Украина, Запорожь е

Репутация: 1
Всего: 109



Как послать письмо в 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: [email protected]\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 ??? 


Да, это и есть аттач. Их может быть несколько.

    > .. но у меня возникли кое-какие еще вопросы:
    > "почтовый хост" - в этом случае прописывается тот адрес, где
    > реально находиться почтовый ящик (т.е. в большинстве
    > случаев у провайдера) или нет

Нет. Этот параметр не имеет никакого отношения к каким-либо почтовым ящикам... Если вы не можете запонить это поле, то не занимайтесь программированием вообще.

    * Открываем свою почтовую программу (для тех, кто не понял: Outlook, Thebat или др)
    * Смотрим, что указано в поле "исходящий (SMTP) сервер"
    * Пишем в параметре "ХОСТ" эти данные (без угловых скобок) 

Пример: smtp.peterlink.ru (если я являюсь клиентом Петерлинка, что дает мне право пользоваться сервером почты). Любой человек как-то пишет письма в Инет. Это "как-то" он делает через почтовый сервер своего провайдера.

    > "кому" - ???
    > "от кого" - ???
    > "тема" - ???

Нет, пожалуй эти поля комментировать не будем... Хотя:

    * Кому - пример: [email protected]
    * От кого - пример (от меня): [email protected]
    * Тема - пример: ... 

Нет, все же лучше не комментировать... 

Автор: Antonio
Сайт автора: www.phpclub.net

PM WWW ICQ Skype GTalk Jabber   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0490 ]   [ Использовано запросов: 23 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.