Главная    Сделать сайт    Раскрутить сайт    Заработать на сайте    Приёмы    Полезное    Инструменты    Блог    Статьи    Контакты

 

 
      Создать сайт
Сделать сайт. Ориентируемся на местности.
Сделать сайт самому. С чего начать?
Какую выбрать CMS для сайта?
 
      Раскрутить сайт
Ведение в SEO. Что это?
Как раскручивать и продвигать сайты?
Выбираем методы продвижения.
Оценка и статистика продвижения.
      Заработать на сайте
Публикации
 
Раскрутка сайта »

17 апреля 2009 (3106 дней 10 часов назад)

Отправка писем при помощи 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>»;
};
};
 
 
   
Наши партнёры:    
 
www.liex.ru - автоматическое размещение статей с прямыми ссылками