switchgital
@switchgital
Front End Developer

Почему Ajax форма отправляет положительный ответ но не отправляет письмо на почту?

Доброго времени суток.

Столкнулся с проблемой. Есть страница, на ней форма с отправкой данных на почту.
Форма на Ajax. После нажатия на кнопку SEND выводится модальное окно с сообщением об успешной отправке сообщения, но само сообщение не доходит. Первый опыт работы с Ajax, могу где-то не понять логики работы, извиняйте за ламмерство)

Разметка формы:
<div class="container-indent">
		<div class="container container-fluid-custom-mobile-padding">
		
		<h1 class="tt-title-subpages noborder">GOT A QUESTIONS?</h1>
		<h2 class="tt-title">FEEL FREE TO TALK WITH US!</h2>
		<p>
			We will explain you everything about what you need to know about your Web Site.
		</p>
			<form id="contactForm cta-two" class="contact-form form-default" action="" method="post" novalidate="novalidate" onsubmit="return false;">
				<div class="row">
					<div class="col-md-6">
						<div class="form-group">
							<input type="text" name="fullName" class="form-control" id="inputName" placeholder="Your Name *">
						</div>
						<div class="form-group">
							<input type="text" name="customerEmail" class="form-control" id="inputEmail" placeholder="Your Email *">
						</div>
						<div class="form-group">
							<input type="text" name="customerSubject" class="form-control" id="inputSubject" placeholder="Subject">
						</div>
					</div>
					<div class="col-md-6">
						<div class="form-group">
							<textarea  name="customerMessage" class="form-control" rows="7" placeholder="Your Message"  id="textareaMessage"></textarea>
						</div>
					</div>
				</div>
				<div class="text-center">
					<button type="submit" id="ctaSend" class="btn">SEND MESSAGE</button>
				</div>
			</form>
		</div>
	</div>


Разметка js в конце страницы:
$('#ctaSend').click(function(){
    $.ajax({
        url: 'senders/cta-two.php',
        type: 'POST',
        dataType: 'html',
        success: function(response) {
            $('#ecomForm').modal();
            },
        error: function(response) {
            alert(response); // ошибка
            }
    });

});


Php обработчик:

<!-- CTA Two -->
<?php
$fullName = $_POST['fullName'];
$customerEmail = $_POST['customerEmail'];
$customerSubject = $_POST['customerSubject'];
$customerMessage = $_POST['customerMessage'];
//
$fullName = htmlspecialchars($fullName);
$customerEmail = htmlspecialchars($customerEmail);
$customerSubject = htmlspecialchars($customerSubject);
$customerMessage = htmlspecialchars($customerMessage);
//
$fullName = urldecode($fullName);
$customerEmail = urldecode($customerEmail);
$customerSubject = urldecode($customerSubject);
$customerMessage = urldecode($customerMessage);
//
$fullName = trim($fullName);
$customerEmail = trim($customerEmail);
$customerSubject = trim($customerSubject);
$customerMessage = trim($customerMessage);

if (mail("mail@gmail.com", 
"Call To Action From Index",
"Customer Subject:".$customerSubject.". 
Customer Full Name:".$fullName.".
Customer Email Address:".$customerEmail.".
Customer Message: ".$customerMessage ,"From: mail@yandex.ru \r\n"))

 {     echo "Message sent successfully"; 
} else { 
    echo "Something went wrong. Try later.";
}
?>


Подскажите в чём накосячил?
  • Вопрос задан
  • 101 просмотр
Решения вопроса 2
@0ffff0
Добрый день@switchgital , сделайте вот что,
объявите переменную flag =false, и на success выставляем значение true
success: function(response) {
            $('#ecomForm').modal();
            flag = true;
            }

потом пишем где-нибудь
if(flag){
alert(responce);
}


и в PHP
if($_POST['fullName']!=''){
 echo "Hello User".  $_POST['fullName'] ."Message sent successfully";
}
Ответ написан
Комментировать
@Vitsliputsli
Учтите, что
error: function(response) {
            alert(response); // ошибка
            }

это обработчик ошибок при работе ajax, т.е. больше сетевая ошибка, или если DataType не соответствует передаваемым данным, с ошибкой отработки логики в php не связано.
Т.е. даже неудачная отправка почты в php придет в success. Сделайте вывод полученного ответа от сервера в консоль отладки, или просто посмотрите его во вкладке Network инструментов разработчика в браузере.
У вас ajax ничего не отправляет, используйте параметр data для отправки данных на сервер.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
@jasper-blondin
Во первых,
выводится модальное окно с сообщением об успешной отправке сообщения

-- это никому даром не нужно. Выведите в консоль response, полученный от скрипта по AJAX. И посмотрите, что Вам скрипт возвращает.

Во вторых,
но само сообщение не доходит

Как Вы это определяете? После прочитанного возникает сомнение, что Вы корректно определяете статус отправки сообщения.

В третьих, адрес mail@gmail.com -- это действительно Ваш адрес?
Ответ написан
iamd503
@iamd503
Верстальщик
Если делаете локально, используя open server, то он письма отправляет в свои логи (вроде тут: \userdata\temp\email\)
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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