На сайтах часто приходится делать формы обратной связи с разными полями. Но бывают ситуации, когда нам нужно отправить пользователю письмо с заранее прикрепленным к нему файлом. Здесь то и могут всплыть подводные камни.
Прежде, чем "прикреплять" к письму файл, вы должны загрузить его на хостинг и знать его путь, пусть это будет: _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 или обновлении страницы не отправлял форму снова (и не вылазило окно с вопросом - повторно отправить форму).
Вот таким не хитрым способом можно отправлять формы с файлами.
Добавить комментарий