@xanthipwalkman

Почему не доходят письма на почту с php?

Не получается получать письма с формы обратной связи сайта.
Есть код js:

$('.modal').on('hidden.bs.modal', function (e) {
	$('input:not(.type)', $(this)).val('');
});

$('form').submit(function(e){
	e.preventDefault();
	var form_data = {
		'name':$(".name", $(this)).val(),
		'tel':$(".tel", $(this)).val(),
		'price':$("#price", $(this)).val(),
		'square':$("#square", $(this)).val(),
		'type':$(".type", $(this)).val()
	};

	$.ajax({
		type: "POST",
		url: "mail.php",
		data: form_data,
		success: function(){
			$('.modal').modal('hide');

			setTimeout(function() {
				$('.success').fadeToggle();
			}, 1000);
			
			setTimeout(function() {
				$('.success').fadeToggle();
			}, 2500);
		},
		error: function() {
			alert("Произошла какая-то ошибка!");
		}
	});
});


Сформировал файл mail.php с содержанием:
<?php
	if ($_SERVER["REQUEST_METHOD"] == "POST") {
		if (isset($_POST['name'])) {
			$name = $_POST['name'];
		}

		if (isset($_POST['tel'])) {
			$tel = $_POST['tel'];
		}

		if (isset($_POST['price'])) {
			$price = $_POST['price'];
		}

		if (isset($_POST['square'])) {
			$square= $_POST['square'];
		}

		if (isset($_POST['type'])) {
			$type = $_POST['type'];
		}

		$to = "ХХХ@ya.ru";
		$subject = "Сообщение с лендинга site.ru";
		$subject = "=?utf-8?B?".base64_encode($subject)."?=";
		
		$message = sprintf("Сообщение с лендинга site.ru\r\n
			Имя отправителя: %s\r\n
			Телефон: %s\r\n
			Цена: %s\r\n
			Площадь: %s\r\n
			Тип: %s", $name, $tel, $price, $square, $type);

		$headers = 'From: abomne.ru';
		$headers =. "\r\nContent-Type: text/html; charset=utf-8";
		
		if(mail($to, $subject, $message, $headers)){
			exit('Спасибо за заказ');
		}
	}
?>

При заполнении форм и отправке формы пишет "Ваша заявка отправлена!", но на почте пусто.
  • Вопрос задан
  • 525 просмотров
Пригласить эксперта
Ответы на вопрос 6
@snake22
А поле from совпадает с доменом почты от имени которой письмо отправляется? Почтовики часто такое письмо в спам кидают или вообще не доставляют, если эти данные не совпадают.
Ответ написан
Комментировать
@AUser0
Чем больше знаю, тем лучше понимаю, как мало знаю.
У вас нет обработки ошибки, нигде.

Если письмо отправилось корректно - скрипт выдаст "Спасибо за заказ!", и этот ответ улетит браузеру (точнее JS-скрипту) с HTTP-кодом "200 Ok". Если письмо не отправлено - скрипт закончится без сообщений и ошибок, и этот пустой ответ тоже улетит браузеру с HTTP-кодом "200 Ok".

А в AJAX-е на 'success' прописано: прилетел любой корректный HTTP-код (а главный из них - код 200 Ok) - показать "Ваша заявка отправлена!". И полностью отсутствует обработка ошибочной ситуации 'error'. И что-бы там не прилетело, текст "Спасибо за заказ" либо пустой ответ - скрипт отработает одинаково ложноположительно...
Ответ написан
SilenceOfWinter
@SilenceOfWinter Куратор тега PHP
та еще зажигалка...
используй mb_send_mail + mb_encode_mimeheader и будет тебе счастье, а еще лучше переходи на готовые библиотеки, отправка почты довольно сложная тема (без шуток).
Ответ написан
Комментировать
@xanthipwalkman Автор вопроса
Спасибо!
почту отправителя не прописал...сейчас поправлю и потестю
корректность заполнения полей формы обратной связи, насколько я понимаю и тестирую, проверяет js
а за доставку почты php
Ответ написан
vurdolak
@vurdolak
Фрилансер
Если отправляешь с локального сервера типа дэнвер и тд, то письма сохраняются в папке tmp
Ответ написан
Комментировать
@Asjacker
Твой хостинг или сервер поддерживает почтовый сервис?
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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