Отправка писем с вложенными файлами

Для отправки писем с вложениями достаточно использовать функцию php mail. Файлы, которые будут отправлены, необходимо закодировать в формат base64 и добавить в тело письма, а также указать в отправляемых заголовках письма информацию о том, что в письме присутствуют файлы. Чтобы отделить закодированный файл от текста письма, необходимо добавить текстовый разделитель, это может быть любая уникальная строка. Разделитель следует обозначить в отправляемых заголовках, и выводить до и после прикрепления файла в тексте письма.

Пример:
// файл 
$file = "/files/file.txt";  
// кому письмо 
$mailTo = "zhenikipatov@yandex.ru";  
// от кого письмо 
$from = "test@files.com";  
// тема письма 
$subject = "Test file";  
// текст письма 
$message = "Тестовое письмо с вложением";  
 
// разделитель в письме 
$separator = "---"; 
// Заголовки для письма 
$headers = "MIME-Version: 1.0\r\n"; 
// задаем от кого письмо 
$headers .= "From: $from\nReply-To: $from\n";  
// в заголовке указываем разделитель 
$headers .= "Content-Type: multipart/mixed;" . 
    "boundary=\"$separator\"";  
 
// начало тела письма, выводим разделитель 
$bodyMail = "--$separator\n";  
// кодировка письма 
$bodyMail .= "Content-type: text/html;" . 
      "charset='utf-8'\n";  
// задаем конвертацию письма 
$bodyMail .= "Content-Transfer-Encoding: quoted-
printable";  
// задаем название файла 
$bodyMail .= "Content-Disposition: attachment;"  
      . "filename==?utf-8?B?" . 
  base64_encode(basename($file))."?=\n\n";  
$bodyMail .= $message."\n"; // добавляем текст письма 
$bodyMail .= "--$separator\n"; 
 
// тип контента и имя файла 
$bodyMail .= "Content-Type: application/octet-stream;"  
    . "name==?utf-8?B?" .  
  base64_encode(basename($file))."?=\n";  
// кодировка файла 
$bodyMail .= "Content-Transfer-Encoding: base64\n";  
$bodyMail .= "Content-Disposition: attachment;" . 
     "filename==?utf-8?B?" . 
 base64_encode(basename($file))."?=\n\n";
// считываем файл 
$contentFile = file_get_contents($file); 
// кодируем и прикрепляем файл 
$bodyMail .= 
chunk_split(base64_encode($contentFile))."\n";  
$bodyMail .= "--".$separator ."--\n"; 
 
// отправка письма 
$result = mail($mailTo, $subject, $bodyMail, 
$headers);  
if($result){ 
  echo "Письмо успешно отправлено"; 
}else{ 
  echo "Письмо не отправлено"; 
}


В рецепте было использовано несколько ранее не описанных функций.
Base64_encode – кодирует данные в формат base64.
Chunk_split – разбивает строку на фрагменты, осуществляет перенос каждого фрагмента на новую строку, по умолчанию длина одного фрагмента 76 символов.
Basename – определяет имя файла из указанного пути.
File_get_contents – получает содержимое файла.
Теги:
mail, base64, Base64_encode, Chunk_split, Basename, File_get_contents, base64
Добавлено: 30 Марта 2018 07:11:44 Добавил: Андрей Ковальчук Нравится 0
Добавить
Комментарии:
Нету комментариев для вывода...