MIME-Version: 1.0Если мы хотим отослать письмо с прикрепленными файлами, то необходимо использовать заголовок Content-type: multipart/mixed, который обозначает, что письмо состоит из нескольких частей, каждая из которых содержит свой заголовок Content-type.
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.
Content-type: text/plain; charset="windows-1251"указали, что это простой текст с кодировкой Windows.
Content-Type: application/x-rar-compressed; name="file.rar"указали, что тип файла – rar-архив, а имя файла – file.rar.
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, которая содержит файл, можно вставлять в письмо.
/* $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>"; }; };
Материалы сайта Справочник Web-языков www.spravkaweb.ru
Скачать обновленный справочник можно отсюда