Использование заголовка Content-Type, таким образом, почти что "черная магия", так как браузеры не руководствуются каким-либо стандартом при работе с различными типами MIME. Но этот метод доказал право на жизнь при написании intranet-приложений, где есть возможность ограничиться узким набором браузеров.
24.4. Электронная почта с вложениями
Отправка простой почты с помощью PHP - дело несложное. Функция mail сама справляется с различными деталями протокола, но если разработчику необходимо отправить вложения, следует ознакомиться с документами RFC, в частности с RFC 1341, в котором описывается протокол MIME (Multipurpose Internet Mail Extensions). С ним можно познакомиться на Web-узле www.faqs.org по адресу <http://www. faqs.org/rfcs/rfc1341.html>, но здесь будет продемонстрирована несколько наивная реализация.
Несколько примеров реализации отправки почты можно найти в Internet. Обратитесь к сетевой секции, которую ведет Девид Скляр (David Sklar) (<http://px. sklar.com/section.html?id=10>). Большая часть этой задачи реализована с помощью класса, при этом сделана попытка использовать любой аспект стандарта.
В листинге 24.6 приводится программный код, который отправляет несколько вложений с помощью двух простых функций. Этот пример можно рассматривать в качестве основы изучения процесса и по необходимости расширения ее функциональности.
** ARRAY attachment ** Вывод: none
** Описание: отправление вложений по почте, ** массив является двумерным. Каждый ** элемент является ассоциативным массивом ** с элементами type, name и content.
*/
function mailAttachment($to, $from, $subject, $attachment)
{
//добавить заголовок from
$headers = "From: $fromrn";
//задать версию MIME 1.0
$headers .= "MIME-Version: 1.0rn";
//различные части требуют разной обработки
if(count($attachment) > 1)
{
// несколько вложений требует специальной обработки
$boundary = uniqid("COREPHP");
$headers .= "Content-Type: multipart/mixed" .
"; boundary = $boundaryrnrn" . "Это сообщение в кодировке MIME.rnrn" .
"--$boundary"; foreach($attachment as $a)
{
$headers .= "rn" .
makeAttachment($a) . "--$boundary";
}
$headers .= "--rn";
}
else
{
$headers .= makeAttachment($attachment[0]);
}
//отправить сообщение
mail($to, $subject, "", $headers);
}
//добавить объясняющее сообщение
$attach[] = array("content"=>"Это листинг 24.6",
"type"=>"text/plain"); // добавить сценарий в список вложений $fp = fopen(_FILE_, "r");
$attach[] = array("name"=>basename(_FILE_),
"content"=>fread($fp, filesize(_FILE_)),
"type"=>"application/octet-stream");
fclose($fp);
// Отправить сообщение пользователю root mailAttachment("root@localhost",
"httpdolocalhost",
"Листинг 2 4.6",
$attach); print("Mail sent!<br>n");
?>
</body> </html>
Функция mailAttachment собирает составляющие части сообщения MIME, которые отправляются в четвертом аргументе функции mail, обычно используемом для задания заголовков. В сообщении MIME эта область используется как для заголовков, так и для вложений. После того как отправлены обычные заголовки From, отправляется заголовок MIME-Version. Несмотря на то что существует только одно вложение, должна быть создана граничная строка. Она предназначена для разделения вложений. Пытаясь избежать граничного значения, которое само по себе может оказаться сообщением, воспользуемся функцией uniqid.
Все вложения окружаются границами, которые обычно начинаются с двух тире. Само по себе вложение подготавливается функцией makeAttachment. Для каждого вложения требуются заголовки Content-Type и Content-Transfer-Encoding. Тип содержимого зависит от самого вложения. Если отправляется изображение, тип должен быть image/jpg. Это те же коды, которые описывались ранее, но в связи с протоколом HTTP. Для простоты эта функция всегда кодирует вложения с помощью кодировки base64, которая позволяет преобразовать двоичную кодировку файлов в 7-битовый код ASCII. Так можно предотвратить их разрушение при передаче через серверы, которые принимают только 7-битовые коды ASCII. Как можно предположить, текстовым файлам кодировка не требуется, полные реализации кодируют вложения на основании типа содержимого.
Внимательно просмотрите все собранное сообщение. Попробуйте отправить сообщение самому себе. В ОС Unix сам файл можно просмотреть в каталоге /var/spool/mail перед его прочтением или в каталоге ~/Mail/received после прочтения.
ТОП-10 популярных
Для работы с вещественными числами в MySQL предусмотрено три типа данных - это типы FLOAT, DOUBLE, DECIMAL. Числовой тип FLOAT...
БОЛЬШЕ БОЛЬШИХ LCD-мониторов
Процесс вытеснения с рынка мониторов с электронно-лучевой трубкой (CRT) продолжается. О смещении акцентов в пользу LCD-мониторов теперь заявляют даже те...
Процесс вытеснения с рынка мониторов с электронно-лучевой трубкой (CRT) продолжается. О смещении акцентов в пользу LCD-мониторов теперь заявляют даже те...
Больше больших LCD-мониторов
Процесс вытеснения с рынка мониторов с электронно-лучевой трубкой (CRT) продолжается. О смещении акцентов в пользу LCD-мониторов теперь заявляют даже те...
Процесс вытеснения с рынка мониторов с электронно-лучевой трубкой (CRT) продолжается. О смещении акцентов в пользу LCD-мониторов теперь заявляют даже те...
НОУТБУК с блестящим экраном
Eсли выпустившая ноутбук фирма предлагает его в качестве «замены настольному ПК», то это должно подразумевать под собой нечто большее, чем...
Eсли выпустившая ноутбук фирма предлагает его в качестве «замены настольному ПК», то это должно подразумевать под собой нечто большее, чем...
Иди и пиши. TravelMate C100
Планшетный компьютер платформы Tablet PC обязан в первую очередь быть легким, способным достаточно долго работать без подзарядки батарей. Эти требования...
Планшетный компьютер платформы Tablet PC обязан в первую очередь быть легким, способным достаточно долго работать без подзарядки батарей. Эти требования...
Магнито-оптический дисковод DynaMO
Cейчас, когда традиционные флоппи-дисководы на долгие годы замерли в своем развитии, поиск альтернативных носителей продолжается, и ситуация, казалось бы, разрешилась...
Cейчас, когда традиционные флоппи-дисководы на долгие годы замерли в своем развитии, поиск альтернативных носителей продолжается, и ситуация, казалось бы, разрешилась...
Компьютер для гурманов.«Эксимер ДМ»
Российская компания «Эксимер ДМ», известная как производитель настольных компьютеров, рабочих станций, серверов и ноутбуков, выступила техническим спонсором проведения торжеств, посвященных...
Российская компания «Эксимер ДМ», известная как производитель настольных компьютеров, рабочих станций, серверов и ноутбуков, выступила техническим спонсором проведения торжеств, посвященных...
Для длинных строк, т.е. строк длиннее 255 символов, в MySQL предусмотрены типы BLOB (Binary Large Object, большой двоичный объект) и...
В дополнение к календарным типам, предназначенным для хранения даты и времени отдельно, MySQL также поддерживает гибридные типы данных DATETIME и...
Вообще, к изменению настроек сервера прибегают очень редко. В MySQL программа заранее настроена так, чтобы соответствовать самым распространенным и основным...
PHP. Сети:HTTP-аутентификация,Управление кэш-памятью браузера,Установка типа документа. Часть Четвёртая.
07-06-2015