Сущность механизма отправки файлов в текстовом сообщении заключается в том, что письмо состоит из нескольких частей, границы которых обозначены уникальной сигнатурой. Именно она и позволяет Вам прикладывать к письму несколько файлов и не смешивать их содержимое в процессе передачи данных.
Я написал класс (точнее, если быть честным - это стандартное решение подобной проблемы. Вы можете найти такой же класс на 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 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]. : ) .rncontent-transfer-encoding: $encodingrnrn$lettern; }
function set_multipart_mail() // Собираем письмо из разрозненных частей { $boundary = b.md5(uniqid(time())); // Создаем уникальное число, служащее индетификатором для чати письма
function get_full_message() // Вставляем тело письма (текстовую начинку) и все файлы // на выходе получаем полное писмо (одна большая строка :))) { $mime = ; if (!empty($this->from)): $mime .= from: .$this->from. rn; endif; if (!empty($this->body)): $this -> attach_file(,$this->body,text/plain); $mime .= mime-version: 1.0rn.$this->set_multipart_mail(); endif;
return $mime; }
function send_mail() // Собственно посыл письма { $mime = $this -> get_full_message(false); mail($this->to,$this->subject,,$mime); } } ?>