Отправить сообщение через PHP с прикрепленным файлом

Отправить сообщение через PHP с прикрепленным файлом

На сайтах часто приходится делать формы обратной связи с разными полями. Но бывают ситуации, когда нам нужно отправить пользователю письмо с заранее прикрепленным к нему файлом. Здесь то и могут всплыть подводные камни.

Прежде, чем "прикреплять" к письму файл, вы должны загрузить его на хостинг и знать его путь, пусть это будет: _buhuchet_pinkbook.xls, который будет находиться в корне вашего сайта. Там же и создадим файл mail.php в кодировке UTF-8 без BOM и пропишем html код формы:

<form action="" method="post" ENCTYPE="multipart/form-data" >
Ваше имя (*)<br><input type="text" name="dfname" style="width: 285px" /><br>
E-mail (*)<br><input type="text" name="dfmail" style="width: 285px;"  /><br>
Телефон<br><input type="text" name="dfgod" style="width: 285px" /><br>
<input type="submit" name="dfbut" value="Отправить" >
</form>

Думаю, все понимают, код формы, единственное, обратите внимание на атрибут ENCTYPE="multipart/form-data" - он необходим для работы с файлами. action у нас пустой, так как этот же файл и будет обрабатывать POST запрос.

Теперь в самое начало этого файла добавим php код:

<?php header('Content-Type: text/html; charset=utf-8');
if (isset($_POST["dfbut"])) {
$to = "кому_отправить@mail.ru";
$subject = "Онлайн заявка";
$dfname = $_POST["dfname"];
$dfmail = $_POST["dfmail"];
$msg = "Ваше имя: ".$dfname."\n<br />E-mail: ".$dfmail."\n<br />Телефон: ".$dfgod;
$un = strtoupper(uniqid(time()));
$charset='utf-8';
$head .= "Mime-Version: 1.0\r\n";
$head .= "Content-Type:multipart/mixed;";
$head .= "boundary=\"----------".$un."\"\n\n";

//формирует файл для отправки
$body = "------------".$un."\nContent-Type:text/html; charset=$charset\r\n";
$body .= "Content-Transfer-Encoding: 8bit\n\n".$msg."\n\n"; //добавляет текст сообщения
$adrfile = '_buhuchet_pinkbook.xls';
$namefile = '_buhuchet_pinkbook.xls';
//если файл $adrfile загружен, то прикрепляем его к письму
if (file_exists($adrfile)) {
$body .= "------------".$un."\n";
$body .= "Content-Type: ".pathinfo($adrfile, PATHINFO_EXTENSION).";";
$body .= "name=\"".$namefile."\"\n";
$body .= "Content-Transfer-Encoding:base64\n";
$body .= "Content-Disposition:attachment;";
$body .= "filename=\"".$namefile."\"\n\n";
$body .= chunk_split(base64_encode(file_get_contents($adrfile)))."\n";
}

mail( $to, $subject, $body, $head );
print "<script>window.location='".$_SERVER['REQUEST_URI']."';</script>";
}
?>

Код не такой и маленький, но не сложный для понимания.

Первая часть кода отвечает за получение данных с формы, инициализации параметров: кому отправить сообщение ($to), формирование заголовков ($head), текста сообщения ($msg) и установку кодировки utf8.

Вторая часть кода готовит файл для отправки. Здесь имеют значение 2 переменные:

$adrfile - полный путь к прикрепляемому файлу в письме
$namefile - имя файла, которое будет отображаться в письме

И последняя часть кода просто отправляет письмо с файлом, если он прикреплен к письму. JavaScript позволит перезагрузить страницу, чтобы пользователь при нажатии F5 или обновлении страницы не отправлял форму снова (и не вылазило окно с вопросом - повторно отправить форму).

Вот таким не хитрым способом можно отправлять формы с файлами.

| | Отправить сообщение через PHP с прикрепленным файлом | На сайтах часто приходится делать формы обратной связи с разными полями. Но бывают ситуации, когда нам нужно отправить пользователю письмо с заранее п | http://blogprogram.ru/wp-content/uploads/2017/08/782-131x131.jpg

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *


Можно использовать следующие HTML-теги и атрибуты: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>