Отправка писем с вложениями на PHP

Автор: Topol Вторник, Апрель 17th, 2012 Нет комментариев

Рубрика: Программирование

Итак, из статьи «Своя рассылка на PHP» Вы уже узнали не только как можно отправлять письма с помощью PHP, но и как организовать простую рассылку своими силами.

С момента выхода той статьи, я получил немало отзывов и вопросов. В основном людей интересовало можно ли с помощью PHP отправлять письма с атачментами (вложениями).

Ну что ж, эта краткая статья и послужит ответом. Итак, далее представлен класс, который с легкостью позволяет прикреплять файлы к письму.

class mime_mail {
var $parts;
var $to;
var $from;
var $headers;
var $subject;
var $body;

// создаем класс
function mime_mail() {
$this->parts = array();
$this->to = «»;
$this->from = «»;
$this->subject = «»;
$this->body = «»;
$this->headers = «»;
}

// как раз сама функция добавления файлов в мыло
function add_attachment($message, $name = «», $ctype = «application/octet-stream») {
$this->parts [] = array (
«ctype» => $ctype,
«message» => $message,
«encode» => $encode,
«name» => $name
);
}

// Построение сообщения (multipart)
function build_message($part) {
$message = $part["message"];
$message = chunk_split(base64_encode($message));
$encoding = «base64″;
return «Content-Type: «.$part["ctype"].($part["name"]? «; name = \»".$part["name"].»\»" : «»).»\nContent-Transfer-Encoding: $encoding\n\n$message\n»;
}

function build_multipart() {
$boundary = «b».md5(uniqid(time()));
$multipart = «Content-Type: multipart/mixed; boundary = $boundary\n\nThis is a MIME encoded message.\n\n—$boundary»;
for($i = sizeof($this->parts)-1; $i>=0; $i—) $multipart .= «\n».$this->build_message($this->parts[$i]). «—$boundary»;
return $multipart.= «—\n»;
}

// Посылка сообщения, последняя вызываемая функция класса
function send() {
$mime = «»;
if (!empty($this->from)) $mime .= «From: «.$this->from. «\n»;
if (!empty($this->headers)) $mime .= $this->headers. «\n»;
if (!empty($this->body)) $this->add_attachment($this->body, «», «text/plain»);
$mime .= «MIME-Version: 1.0\n».$this->build_multipart();
mail($this->to, $this->subject, «», $mime);
}
}

Вот и все, привожу пример использования класа:

$attachment = fread(fopen(«file.zip», «r»), filesize(«file.zip»));
$mail = new mime_mail();
$mail->from = «my@e-mail.com»;
$mail->headers = «Errors-To: [EMAIL=my@e-mail.com]my@e-mail.com[/EMAIL]«;
$mail->to = «user@e-mail.com»;
$mail->subject = «PHP atachment»;
$mail->body = «Get your file!»;
$mail->add_attachment(«$attachment», «file.zip», «Content-Transfer-Encoding: base64 /9j/4AAQSkZJRgABAgEASABIAAD/7QT+UGhvdG9zaG»);
$mail->send();

Третий параметр в add_attachment передает заголовок типа файла, например, для картинки будет «image/jpeg»

Вот, собственно и все, как видите, ничего сложного. Будут вопросы — задавайте.

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

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

Чтобы оставлять комментарии Вы должны быть авторизованы.

Похожие посты