Статьи о почте

Новости

Все новости

Разное в мире IT

Все заметки

mailinfo.ru - Статьи о почте

Отправка файлов аттачем

Прислал(а) ThE0ReTiC [26 марта 2002]

раздел: [Исходники]

Сущность механизма отправки файлов в текстовом сообщении заключается в том, что письмо состоит из нескольких частей, границы которых обозначены уникальной сигнатурой. Именно она и позволяет Вам прикладывать к письму несколько файлов и не смешивать их содержимое в процессе передачи данных.

Я написал класс (точнее, если быть честным - это стандартное решение подобной проблемы. Вы можете найти такой же класс на php.spb.ru. Я не стал переписывать его без изменений, а немного переработал творчески.

Итак исходный код класса с комментариями:
<?
class multi_mail
{
var $from;  // Отправитель
var $to;    // Получатель
var $headers; // Заголовок сообщения
var $body;  // Тело сообщения


function multi_mail()     // Конструктор класса
// Проводим инициализацию переменных
{
$this -> from = "";
$this -> to = "";
$this -> body = "";
$this -> headers = Array();
$this -> subject = "";
}

// Присоединяем файл
function attach_file($file_name = "" , // Имя файла
$file_content,    // Содержимое файла
$encoding_type = "application/octet-stream" 
//Тип кодировки данных. ) { $this -> headers[] = array( // Записываем заголовочную информацию. "name" => $file_name, "content" => $file_content, "encode" => $encoding_type ); } function build_letter($header)
// Строим Часть письма, будь то аттаченный файл или простой текст { $letter = $header["content"]; if ($header["encode"] != "text/plain"): $letter = chunk_split(base64_encode($letter)); $encoding = "base64"; else: $encoding = $header["encode"]; endif; return "Content-Type: ".$header["encode"]. ($header["name"]? ".; name = \\"".$header["name"]."\\"" : "") ."\\r\\nContent-Transfer-Encoding: $encoding\\r\\n\\r\\n$letter\\n"; } function set_multipart_mail() // Собираем письмо из разрозненных частей { $boundary = \'b\'.md5(uniqid(time()));
// Создаем уникальное число, служащее индетификатором для чати письма $multipart = "Content-Type: multipart/mixed; boundary =$boundary\\n\\nThis is a MIME encoded letter\\r\\n\\r\\n--$boundary"; for($step = sizeof($this->headers)-1; $step >=0; $step--) { $multipart .= "\\r\\n".$this->build_letter($this->headers[$step])."--$boundary"; // Вставляем содержимое межу метками } return $multipart .= "--\\r\\n"; } function get_full_message() // Вставляем тело письма (текстовую начинку) и все файлы // на выходе получаем полное писмо (одна большая строка :))) { $mime = ""; if (!empty($this->from)): $mime .= "From: ".$this->from." \\r\\n"; endif; if (!empty($this->body)): $this -> attach_file("",$this->body,"text/plain"); $mime .= "MIME-Version: 1.0\\r\\n".$this->set_multipart_mail(); endif; return $mime; } function send_mail() // Собственно посыл письма { $mime = $this -> get_full_message(false); mail($this->to,$this->subject,"",$mime); } } ?>
Уложив этот класс в отдельный файл, Вы можете использовать его где угодно. Работающие примеры attach.class.src, attach.sample.full.src прилагаются. Если есть вопросы - обращайтесь.