Гостевая
Форум
Разделы
Главная страница
Js скрипты
Php скрипты
Html шаблоны
Книги по Web дизайну
Статьи


Главная страница статей --> Хитрости при программировании php, заметки по базам данных

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

Источник: realcoding.net

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

Я написал класс (точнее, если быть честным - это стандартное решение подобной проблемы. Вы можете найти такой же класс на 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]. : )
.
rncontent-transfer-encoding:
$encodingrnrn$lettern
;
}

function
set_multipart_mail() // Собираем письмо из разрозненных частей
{
$boundary = b.md5(uniqid(time()));
// Создаем уникальное число, служащее индетификатором для чати письма

$multipart = content-type: multipart/mixed;
boundary =$boundarynnthis is a mime encoded letterrnrn--$boundary
;
for(
$step = sizeof($this->headers)-1; $step >=0; $step--)
{
$multipart .= rn.$this->build_letter($this->headers[$step]).--$boundary;
// Вставляем содержимое межу метками
}
return
$multipart .= --rn;
}

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);
}
}
?>



Похожие статьи:
- Делаем свою RSS ленту
- Классы в MySQL
- Как создать сайт? Советы для новичков
- Как зарабатывать деньги на сайте
- Asynchronous JavaScript and XML (AJAX)
- Контролируемая отдача файлов
- Подгрузка меню для сайта с фреймами
- Новый подход к веб-приложениям
- Создание таблиц Excel средствами PHP
- Серверные скрипты. Введение
- Оптимизация кода для поисковых систем
- Использование сессий в PHP
- Посещаемость сайта рефералами


Оглавление | Обсудить на форуме | Главная страница сайта | Карта сайта |
[0.001]