@lexstile

Как отправить файл на почту через ajax?

Помогите, пожалуйста, отправить на почту несколько файлов через форму.
HTML:
<form class="quest" method="POST" action="" enctype="multipart/form-data">
						<input id="client_name_order" type="text" placeholder="Ваше имя" >
						<input id="client_phone_order" type="text" placeholder="Ваш телефон" >
						<input id="client_email_order" type="text" placeholder="Ваш e-mail" >
						<textarea id="client_text_order" placeholder="Ваше сообщение"></textarea>
						<p>Прикрепить файл:</p>
						<input name="uploaded_file" id="client_file_order" type="file" multiple="" >
						<input name="submit" type="submit" value="ОТПРАВИТЬ" onclick="order_form(); return false;">
					</form>

JS:
function order_form(){
	var message = '';
	var client_name = $("#client_name_order").val();
	var client_phone = $("#client_phone_order").val();
	var client_email = $("#client_email_order").val();
	var client_text = $("#client_text_order").val();
	
	if (client_phone == ''){
		//alert('Пожалуйста, напишите свой номер телефона.');
		swal({ title: "",   text: "Не заполнено поле 'Ваш телефон'",   type: "error",   confirmButtonText: "ОK", confirmButtonColor: "#CD0117" });
		return;
	}else if(client_email == ''){
		swal({ title: "",   text: "Не заполнено поле 'Ваш e-mail'",   type: "error",   confirmButtonText: "ОK", confirmButtonColor: "#CD0117" });
		return;
	}else{
		message = 'Телефон: ' + client_phone + '<br /> Имя: ' + client_name + '<br /> Почта: ' + client_email + '<br /> Сообщение: ' + client_text;
		$.ajax({
			url: '/mailer/send_letter.php',
			type: 'post',
			data: 'mode=call_back&message=' + message,
			dataType: 'text',
			success: function(data) {
				if (data = '0'){
					swal({ title: "",   text: "Ваша заявка успешно отправлена!",   type: "success",   confirmButtonText: "ОK", confirmButtonColor: "#CD0117" });
					setTimeout(function(){ location.reload(); }, 3000);
					return;
				}else{
				swal({ title: "",   text: "Ошибка отправки сообщения",   type: "error",   confirmButtonText: "ОK", confirmButtonColor: "#CD0117" });
				return;
				}
			}
		});
	}
}

PHP:
<?php

 if (count ($_POST) > 0) 


 {
		include "class.phpmailer.php";





		$default='не уточняется';





					


        $text = $_POST['message'];




		$result = '0';


		


	


		


	





            $mail = new PHPMailer(true); //defaults to using php "mail()"; the true param means it will throw exceptions on errors, which we need to catch


            try {





                $mail->CharSet = "UTF-8";
				$mail->FromName = mb_convert_encoding($header, "UTF-8", "auto");




                $mail->SetFrom('info@'.$_SERVER['HTTP_HOST']);


                $mail->Subject = "Заказ обратного звонка с сайта ".$_SERVER['HTTP_HOST'];


                //    $text = $message;





                $mail->MsgHTML($text);
				/*if (isset($_FILES['uploaded_file']) && $_FILES['uploaded_file']['error'] == UPLOAD_ERR_OK){
					$mail->AddAttachment($_FILES['uploaded_file']['tmp_name'], $_FILES['uploaded_file']['name']);
				}*/





                $text = str_replace("<br/>", "\n", $text); 


                $text = strip_tags($text);


                $mail->AltBody = $text;





				$mail->AddAddress('test@mail.ru');
				$mail->AddAddress('test@yandex.ru');


                


                // отправляем наше письмо


                if($mail->Send())


                {


                    echo "0";


                }


            }





            catch (phpmailerException $e) {


                echo "1";


            }     catch (Exception $e) {


                echo "1";


            }


	


	}


?>
  • Вопрос задан
  • 4171 просмотр
Решения вопроса 2
agmegadeth
@agmegadeth
Веб-разработчик в дизайн студии
в php:
//Обрабатываем файлы
if (isset($_FILES)) { //если есть файлы в форме
	foreach ($_FILES as $file_item) {
		if (!is_array($file_item['error'])) { //проверяем множественное или нет поле файла
			if ($file_item['error'] == UPLOAD_ERR_OK) {
				$mail->AddAttachment($file_item['tmp_name'],$file_item['name']);
			}
		} else {
			foreach ($file_item["error"] as $key => $error){
				if ($error == UPLOAD_ERR_OK) {
					$tmp_name = $file_item["tmp_name"][$key];
					$name = $file_item["name"][$key];
					$mail->AddAttachment($tmp_name,$name);
				}
			}
		}
	}
}
//Обрабатываем файлы


Сам аякс запрос у меня такой:
var form_data = new FormData($(селектор формы));

$.ajax({
	type: "POST",
	async: true,
	url: "/send.php",
	cache: false,
	contentType: false,
	processData: false,
	data: form_data
});
Ответ написан
@ZSarKZ
Используй https://developer.mozilla.org/ru/docs/Web/API/FormData через него можно отправить файл через аякс
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
Stalker_RED
@Stalker_RED
$mail->addAttachment($path);

Подробнее: https://github.com/PHPMailer/PHPMailer/wiki/Tutorial
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Похожие вопросы