ТОП-10 популярных



Для работы с вещественными числами в MySQL предусмотрено три типа данных - это типы FLOAT, DOUBLE, DECIMAL. Числовой тип FLOAT...

НОУТБУК с блестящим экраном
Eсли выпустившая ноутбук фирма предлагает его в качестве «замены настольному ПК», то это должно подразумевать под собой нечто большее, чем...

БОЛЬШЕ БОЛЬШИХ LCD-мониторов
Процесс вытеснения с рынка мониторов с электронно-лучевой трубкой (CRT) продолжается. О смещении акцентов в пользу LCD-мониторов теперь заявляют даже те...

Больше больших LCD-мониторов
Процесс вытеснения с рынка мониторов с электронно-лучевой трубкой (CRT) продолжается. О смещении акцентов в пользу LCD-мониторов теперь заявляют даже те...

Магнито-оптический дисковод DynaMO
Cейчас, когда традиционные флоппи-дисководы на долгие годы замерли в своем развитии, поиск альтернативных носителей продолжается, и ситуация, казалось бы, разрешилась...

Иди и пиши. TravelMate C100
Планшетный компьютер платформы Tablet PC обязан в первую очередь быть легким, способным достаточно долго работать без подзарядки батарей. Эти требования...

ПОД ЛИТЕРОЙ «N»
Aтаку LCD-мониторов не остановить, а масштабы этого наступления даже немного пугают. Судите сами — многие пользователи только начинают приглядываться к новому для...


Для длинных строк, т.е. строк длиннее 255 символов, в MySQL предусмотрены типы BLOB (Binary Large Object, большой двоичный объект) и...

Размер объему не помеха.
С тех пор как компания Fujitsu отказалась от производства жестких дисков для настольных компьютеров, многие пользователи начали забывать о том,...


Какую только информацию мы не помещаем на компакт-диски: резервные копии важных данных, музыку, фильмы... Многие полагают, что главное - «купить...

PHP. Сети:HTTP-аутентификация,Управление кэш-памятью браузера,Установка типа документа. Часть Четвёртая.


07-06-2015

Использование заголовка 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 приводится программный код, который отправляет несколько вложений с помощью двух простых функций. Этот пример можно рассматривать в качестве основы изучения процесса и по необходимости расширения ее функциональности.
Сети:HTTP-аутентификация,Управление кэш-памятью браузера,Установка типа документа
** 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 после прочтения.

Понравился материал? Поделитесь с друзьями!



<< Предыдущая статьяСледующая статья >>
PHP. Сети:HTTP-аутентификация,Управление кэш-памятью браузера,Установка типа документа. Часть Третья. PHP. Сети:HTTP-аутентификация,Управление кэш-памятью браузера,Установка типа документа. Часть Пятая.