[ главная ]   [ рейтинг статей ]   [ справочник радиолюбителя ]   [ новости мира ИТ ]



Ответов: 0
25-02-12 07:01







   Web - программирование
PHP


ASP






XML



CSS

SSI





   Программирование под ОС











   Web - технологии








   Базы Данных









   Графика






Данные




Web - программирование / PHP /

Отправка писем при помощи PHP-Прикрепление файла

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

Одна из особенностей - наличие заголовка mime-version.
Этот заголовок указывает стандарт, которому соответствует тело сообщения.
Сообщения, соответствующие mime обязаны содержать такое поле заголовка со следующим текстом:
mime-version: 1.0

Если мы хотим отослать письмо с прикрепленными файлами, то необходимо использовать заголовок content-type: multipart/mixed, который обозначает, что письмо состоит из нескольких частей, каждая из которых содержит свой заголовок content-type. Для обозначения границы этих частей необходимо использовать параметр boundary, который еще называется маркером границы.
Значением этого параметра может служить любая строка. Но надо учесть, что она должна быть уникальной и не встречалась в теле письма. Иначе письмо может быть неправильно разбито на части.

from: "uspenskii evgeny" <evgeny@spravkaweb.ru>
to: user@domain.ru
subject: hello
mime-version: 1.0
content-type: multipart/mixed; boundary="spravkaweb-12345"

При разделении письма на части перед маркером должны стоять два знака дефиса.
А последний маркер, который обозначает конец письма, должен содержать в конце два знака дефиса.
Для каждой части необходимо установить свои заголовки.
После заголовков необходимо поставить два знака перевода строки.

from: "uspenskii evgeny" <evgeny@spravkaweb.ru>
to: user@domain.ru
subject: hello
mime-version: 1.0
content-type: multipart/mixed; boundary="spravkaweb-12345"
--spravkaweb-1234
content-type: text/plain; charset="windows-1251"
content-transfer-encoding: quoted-printable

hi!
here's that my file!

--spravkaweb-1234
content-type: application/x-rar-compressed; name="file.rar"
content-transfer-encoding:base64
content-disposition:attachment

umfyiroham+qcwaadqaaaaaaaabvyxqg ......
spravkaweb-1234--

Если у нас идет часть с текстом, то надо заголовок content-transfer-encoding присвоить значение quoted-printable, либо 7bit, либо 8bit. Для части с файлом этот заголовок должен быть равен base64.

Заголовок content-disposition, присутствующий во второй части, указывает, как почтовой программе следует отобразить данную часть письма. Он может принимать значение attachment (этот участок не является частью письма, а просто прикреплен к нему в виде файла) и inline (включение, которое используется непосредственно в письме, например, картинка, вставляемая в html).

В первой части заголовком
content-type: text/plain; charset="windows-1251"

указали, что это простой текст с кодировкой windows.
Во второй же части заголовком
content-type: application/x-rar-compressed; name="file.rar"

указали, что тип файла - rar-архив, а имя файла - file.rar.
Если отправляем gif-картинку, его content-type будет выглядеть:
content-type: image/gif; name="file.gif"

В случае, если заранее не известно, какой тип файла отправляем, или формат файла не является стандартным, следует заголовку content-type присвоить значение application/octet-stream.
content-type: application/octet-stream; name="file.dat"

Прикрепленные файлы должны быть размещены в письме в формате base64.
Преобразовать файл в этот формат можно при помощи функции base64_encode():
// Открываем файл для чтения в бинарном формате
$file=fopen("file.zip", "rb");
// Считываем его в строку $str_file
$str_file=fread($file,filesize("file.zip"));
// Преобразуем эту строку в base64-формат
$str_file=base64_encode($str_file);

Теперь переменную $str_file, которая содержит файл, можно вставлять в письмо.

Для окончательного закрепления материала напишем функцию, которая отправляет письмо в
html-формате по указанному адресату с прикрепленным файлом:


/*
$to -
адрес получателя письма
$from_mail -
адрес отправителя письма
$from_name -
имя отправителя письма
$subject -
тема письма
$message -
само сообщение в html-формате
$file_name -
путь к файлу, который надо прикрепить к письму
(
это может быть имя файла, выбранного в поле <input type=file name=file_name>)
*/
function sendmail($to,$from_mail,$from_name,$subject,$message,$file_name) {
$bound="spravkaweb-1234";
$header="from: "$from_name" <$from_mail>n";
$header.="to: $ton";
$header.="subject: $subjectn";
$header.="mime-version: 1.0n";
$header.="content-type: multipart/mixed; boundary="$bound"";
$body="nn--$boundn";
$body.="content-type: text/html; charset="windows-1251"n";
$body.="content-transfer-encoding: quoted-printablenn";
$body.="$message";
$file=fopen($file_name,"rb");
$body.="nn--$boundn";
$body.="content-type: application/octet-stream;";
$body.="name="".basename($file_name).""n";
$body.="content-transfer-encoding:base64n";
$body.="content-disposition:attachmentnn";
$body.=base64_encode(fread($file,filesize($file_name)))."n";
$body.="$bound--nn";
if(
mail($to, $subject, $message, $header)) {
echo
"<center>Письмо было успешно отправлено!</center>";
} else {
echo
"<center>Сообщение не отправлено!</center>";
};
};





Комментарии

 Ваш комментарий к данному материалу будет интересен нам и нашим читателям!



Последние статьи: Web - программирование / PHP /

GTK+: перспективы развития
02-03-2010   

Библиотека GTK+ прошла долгий путь развития и сейчас очень популярна. GNOME, одна из ведущих оконных сред, использует GTK+ почти исключительно, GIMP построен на GTK+, множество коммерческих разработчиков ПО, таких как Abobe, NVidia и VMware, решили использовать эту библиотеку в качестве графической основы для своих продуктов... подробнее

Кол. просмотров: общее - 5194 сегодня - 0

Новостной портал
13-11-2009   

Slashdot.org – популярный новостной портал с посещаемостью 50 млн. человек в месяц. Авторы проекта добились такого успеха, предоставляя пользователям свежие и интересные новости из мира IT... подробнее

Кол. просмотров: общее - 5112 сегодня - 0

Параллельное выполнение скриптов может нарушить целостность информации в файлах
13-11-2009   

Здесь рассматривается вопрос, что бывает, если запустить некий скрипт почти одновременно (что происходит, например, при большой нагруженности сервера) несколько раз, т.е. запустить несколько копий одного и того же скрипта. И к чему это может привести... подробнее

Кол. просмотров: общее - 4873 сегодня - 0

No spam.php
10-11-2009   

...и снова о спаме. Кто о нем только не писал, и все писали, что это плохо и ай-яй-яй. Я не буду оригинальничать, и тоже скажу – это плохо. Это ай-яй-яй. Как бороться со спамерами со своей стороны... подробнее

Кол. просмотров: общее - 4931 сегодня - 1

Начинаем работу с рисунками в php для Windows
10-11-2009   

Эта статья даст вам общее представление о том, как создавать, обрабатывать и выводить рисунки в PHP4 для Windows... подробнее

Кол. просмотров: общее - 4908 сегодня - 1



  WWW.COMPROG.RU - 2009-2012 | Designed and Powered by Zaipov Renat | Projects