Справочник по PHP


Прикрепление файла - часть 2


Если у нас идет часть с текстом, то надо заголовок 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: $to\n";  $header.="Subject: $subject\n";  $header.="Mime-Version: 1.0\n";  $header.="Content-Type: multipart/mixed; boundary=\"$bound\"";  $body="\n\n--$bound\n";  $body.="Content-type: text/html; charset=\"windows-1251\"\n";  $body.="Content-Transfer-Encoding: quoted-printable\n\n";  $body.="$message";  $file=fopen($file_name,"rb");  $body.="\n\n--$bound\n";  $body.="Content-Type: application/octet-stream;";  $body.="name=\"".basename($file_name)."\"\n";  $body.="Content-Transfer-Encoding:base64\n";  $body.="Content-Disposition:attachment\n\n";  $body.=base64_encode(fread($file,filesize($file_name)))."\n";  $body.="$bound--\n\n";  if(mail($to, $subject, $body, $header)) {    echo "<center>Письмо было успешно отправлено!</center>";  } else {    echo "<center>Сообщение не отправлено!</center>";  };};

 




Начало  Назад  Вперед



Книжный магазин