@rRiorico

Отправка файла из формы на e-mail?

Здравствуйте! Помогите пожалуйста, кому не сложно.
Есть форма:
<form id="form">
	<input type="text" name="name" placeholder="Ваше имя" required /><br />
	<input type="text" name="tel" placeholder="Ваш телефон" required /><br />
	<input type="file" name="file">
	<button>Отправить</button>
</form>

К ней подключен скрипт, который собирает данные из формы и отправляет на сервер (насколько я понимаю):
$(document).ready(function() {

	$("#form").submit(function() {
		$.ajax({
			type: "POST",
			url: "mail.php",
			data: $(this).serialize()
		}).done(function() {
			$(this).find("input").val("");
			alert("Спасибо за заявку! Скоро мы с вами свяжемся.");
			$("#form").trigger("reset");
		});
		return false;
	});
	
});

И все это дело отправляет на почту такая конструкция на PHP:
<?php

$recepient = "myemail@mail.com";
$sitename = "Название сайта";

$name = trim($_POST["name"]);
$phone = trim($_POST["tel"]);
$message = "Имя: $name \nТелефон: $phone";

$pagetitle = "Новая заявка с сайта \"$sitename\"";
mail($recepient, $pagetitle, $message, "Content-type: text/plain; charset=\"utf-8\"\n From: $recepient");


Нужно прикрутить возможность отправки файлов (из третьего поля формы) на e-mail. В программировании можно сказать я полный ноль. Нашла в гугле только то, что метод serialize для этого не подходит, нужно делать через FormData. Буду очень вам благодарна за помощь!
  • Вопрос задан
  • 7784 просмотра
Пригласить эксперта
Ответы на вопрос 2
Stalker_RED
@Stalker_RED
Если вы действительно полный ноль, то есть вероятность, что отправку файлов вы не осилите, или провозитесь очень долго, на что и намекал Сергей Сергеев.

Отправлять файлы через mail() дело неблагодарное, придется формировать заголовки вручную и в деталях разбираться с нюансами работы почты.

Проще использовать библиотеки типа PHPMailer, PEAR/Mail2 и т.п.
Ответ написан
vahe_2000
@vahe_2000
HTML

обязятелно enctype="multipart/form-data"
<form method="post" action="attach.php" enctype="multipart/form-data">
	<input type="text" name="email"/><br>
	<input type="file" name="attachment"/><br>
	<input type="submit" name="send">
</form>


Обрати внимание, только некоторые из вещей

$content = chunk_split(base64_encode(file_get_conte­nts($file)));
$headers .= "Content-Type: multipart/mixed; boundary=\"".$uid."\"­;\r\n\r\n";
$headers .= "Content-Transfer-Encoding: base64\r\n";
$headers .= "Content-Disposition: attachment; filename=\"".$file_name."­\"\r\n\r\n";
$headers .= "Content-type:text/plain; charset=iso-8859-1\r\n";
$headers .= "Content-Transfer-Encoding: 7bit\r\n\r\n";


а теперь php attach.php

<?php
if (isset($_POST['send'])) {
	if (!empty($_FILES['attachment']['name'])) {

		// некоторые переменные
		$file_name = $_FILES['attachment']['name'];
		$temp_name = $_FILES['attachment']['tmp_name'];
		$file_type = $_FILES['attachment']['type'];

		// получить расширение файла
		$base = basename($file_name);
		$extension = substr($base, strlen($base)-4,strlen($base));

		// только это типы файлов будет разрешено
		$allowed_extensions = array(".doc","docx",".pdf",".zip",".png");

		// убедитесь, что этот тип файла допускается
		if (in_array($extension, $allowed_extensions)) {
			
			// основы
			$from = $_POST['email'];
			$to = "some@mail.ru";
			$subject = "Subject";
			$message = "message";
		} else {

			//вещи, которые нужно
			$file = $temp_name;
			$content = chunk_split(base64_encode(file_get_contents($file)));
			$uid = md5(uniqid(time()));

			//
			$headers = "From: ". $from."\r\n";
			$headers = "MIME-Version: 1.0" . "\r\n";

			// Заявив, у нас есть несколько видов электронной почте (т.е. обычный текст и вложения)
			$headers .= "Content-type: multipart/mixed;boundary=\"".$uid."\"\r\n\r\n";
			$headers .= "This is a multi-part message in MIME format.\r\n":

			// Обычная текстовая часть
			$headers .= "--".$uid."\r\n";
			$headers .= "Content-type: text/plain; charset=iso-8859-1\r\n";
			$headers .= "Content-Transfer-Encoding: 7bit\r\n\r\n";
			$headers .= $message."\r\n\r\n";

			// Влажение файла
			$headers .= "--".$uid."\r\n";
			$headers .= "Content-Type:". $file_type.":name=\"".$file_name."\"\r\n";
			$headers .= "Content-Transfer-Encoding: base64\r\n";
			$headers .= "Content-Description: attachment;filename=\"".$file_name."\r\n";
			$headers .= $content."\r\n\r\n";

			// Oтправить по почте (сообщение не здесь, а в заголовке в нескольких части

			if (mail($to, $subject, "",$headers)) {
				echo "Спасибо за заявку! Скоро мы с вами свяжемся";
			} else {
				echo "Неполучилось";
			}

		} else {
			echo "тип файла не имеет";
		}

	} else {
		echo "файл не прикреплен";
	}
}
?>
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы