Отправка файла по e-mail на PHP

5/1
Описание материала:

В этой статье освещается тема отправки файлов по e-mail на PHP. Задача эта весьма популярная, а вот многие не знают, как это делается и научились только отправлять обычные письма без вложенных файлов.

Ниже расположен скрипт, который Вы смело можете копировать и использовать в своих скриптах. Этот код позволяет отправлять файлы по e-mail через PHP:

<?php
  $filename = "form.txt"; //Имя файла для прикрепления
  $to = "abc@mail.ru"; //Кому
  $from = "def@gmail.com"; //От кого
  $subject = "Test"; //Тема
  $message = "Текстовое сообщение"; //Текст письма
  $boundary = "---"; //Разделитель
  /* Заголовки */
  $headers = "From: $from\nReply-To: $from\n";
  $headers .= "Content-Type: multipart/mixed; boundary=\"$boundary\"";
  $body = "--$boundary\n";
  /* Присоединяем текстовое сообщение */
  $body .= "Content-type: text/html; charset='utf-8'\n";
  $body .= "Content-Transfer-Encoding: quoted-printablenn";
  $body .= "Content-Disposition: attachment; filename==?utf-8?B?".base64_encode($filename)."?=\n\n";
  $body .= $message."\n";
  $body .= "--$boundary\n";
  $file = fopen($filename, "r"); //Открываем файл
  $text = fread($file, filesize($filename)); //Считываем весь файл
  fclose($file); //Закрываем файл
  /* Добавляем тип содержимого, кодируем текст файла и добавляем в тело письма */
  $body .= "Content-Type: application/octet-stream; name==?utf-8?B?".base64_encode($filename)."?=\n";
  $body .= "Content-Transfer-Encoding: base64\n";
  $body .= "Content-Disposition: attachment; filename==?utf-8?B?".base64_encode($filename)."?=\n\n";
  $body .= chunk_split(base64_encode($text))."\n";
  $body .= "--".$boundary ."--\n";
  mail($to, $subject, $body, $headers); //Отправляем письмо
?>

Скрипт достаточно хорошо прокомментирован, но я добавлю ещё один важный момент. Обратите внимание, что если идут вложенные файлы, то текст письма нужно тоже делать, как прикрепление к письму, однако, тип содержимого будет другой. Это весьма серьёзная особенность, если не сделать так, то текст письма отправлен не будет. Это очень частая ошибка, поэтому обратите на это особое внимание.

Данный PHP-скрипт для отправки файлов по e-mail сделан максимально коротким, он универсален, поэтому Вы можете его дорабатывать под свои нужды так, как пожелаете.

html-cсылка на публикацию
BB-cсылка на публикацию
Прямая ссылка на публикацию