Главная » Полезные статьи » Язык PHP » Как слать письма в PHP с аттачами
Распечатать статью

Как слать письма в 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_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х частей.
необходимые функции
как написать письмо с аттачем. Аттач — это 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
Тема — пример: …

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

Источник:   codingrus.ru

Вы можете оставить комментарий, или обратную ссылку на Ваш сайт.

Оставить комментарий

Похожие статьи