@Gor321

Не приходят формы с сайта на почту?

Здравствуйте! Помогите разобраться пожалуйста.
Делаю формы обратной связи на сайте, используя uniMail ( https://webdesign-master.ru/blog/tools/578.html ).
Сначала все шло хорошо, данные с форм падали на почту, но в какой то момент перестали работать все формы. В чем причина не могу понять, то ли ошибки в коде, то ли что то не от меня зависящее
Подскажите, как быть, что делать?

srcipt.js
$("form").submit(function() { //Change
		var th = $(this);
		$.ajax({
			type: "POST",
			url: "../js/mail.php", //Change
			data: th.serialize()
		}).done(function() {
			alert('thanks');
			
			setTimeout(function() {
				// Done Functions
				th.trigger("reset");
			}, 1000);
		});
		return false;
	});

------------------------
mail.
<?php
$method = $_SERVER['REQUEST_METHOD'];
//Script Foreach
$c = true;
if ( $method === 'POST' ) {
	$project_name = trim($_POST["project_name"]);
	$admin_email  = trim($_POST["admin_email"]);
	$form_subject = trim($_POST["form_subject"]);
	foreach ( $_POST as $key => $value ) {
		if ( $value != "" && $key != "project_name" && $key != "admin_email" && $key != "form_subject" ) {
			$message .= "
			" . ( ($c = !$c) ? '<tr>':'<tr style="background-color: #f8f8f8;">' ) . "
				<td style='padding: 10px; border: #e9e9e9 1px solid;'><b>$key</b></td>
				<td style='padding: 10px; border: #e9e9e9 1px solid;'>$value</td>
			</tr>
			";
		}
	}
} else if ( $method === 'GET' ) {
	$project_name = trim($_GET["project_name"]);
	$admin_email  = trim($_GET["admin_email"]);
	$form_subject = trim($_GET["form_subject"]);
	foreach ( $_GET as $key => $value ) {
		if ( $value != "" && $key != "project_name" && $key != "admin_email" && $key != "form_subject" ) {
			$message .= "
			" . ( ($c = !$c) ? '<tr>':'<tr style="background-color: #f8f8f8;">' ) . "
				<td style='padding: 10px; border: #e9e9e9 1px solid;'><b>$key</b></td>
				<td style='padding: 10px; border: #e9e9e9 1px solid;'>$value</td>
			</tr>
			";
		}
	}
}
$message = "<table style='width: 100%;'>$message</table>";
function adopt($text) {
	return '=?UTF-8?B?'.Base64_encode($text).'?=';
}
$headers = "MIME-Version: 1.0" . PHP_EOL .
"Content-Type: text/html; charset=utf-8" . PHP_EOL .
'From: '.adopt($project_name).' <'.$admin_email.'>' . PHP_EOL .
'Reply-To: '.$admin_email.'' . PHP_EOL;
mail($admin_email, adopt($form_subject), $message, $headers );
?>

--------------------------------------
html

<form class="callback-form">
	<!-- Hidden Required Fields -->
	<input type="hidden" name="project_name" value="сайт">
	<input type="hidden" name="admin_email" value=почта">
	<input type="hidden" name="form_subject" value="ЗАБРОНИРУЙТЕ горящую путевку">
	<!-- END Hidden Required Fields -->
	<span>ЗАБРОНИРУЙТЕ горящую путевку прямо сейчас!</span><br>
		
	<input id="six" class="telephon" type="text" placeholder="+7 " name="Телефон" placeholder="+7" required="required"><br>
						
	<a href="#win9" class="locked btn-hot six"><button type="submit">ЗАБРОНИРОВАТЬ ГОРЯЩУЮ ПУТЕВКУ</button></a>
	<div class="dm-overlay" id="win9">
		<div class="dm-table">
			<div class="dm-cell">
				<div class="dm-modal pop-thanks">
					<a href="#close" class="close"></a>
					<div class="heart"></div>
					<h3>Вам повезло!=)</h3>
					<p>Код брони уже отправлен<br>указанным способом!</p>
				</div>
			</div>
		</div>
	</div>
</form>
  • Вопрос задан
  • 202 просмотра
Пригласить эксперта
Ответы на вопрос 3
@alexalexes
У вас что клиентский, что серверный скрипт не имеют функционала оповещать пользователя о возникшей ошибке.
php-скрипт должен отдавать хоть малюсенькое текстовое сообщение, что удалось отправить почту.
....
$send_result = mail($admin_email, adopt($form_subject), $message, $headers );
echo $send_result ? 'success' : 'fail';

Клиентский скрипт должен иметь возможность в коллбэк функции done словить это сообщение:
...
).done(function(e)
{
    var resp = e.responseText;
    alert(resp === 'success' ? 'Сообщение отправлено!' : 'Ошибка отправки сообщения');
....
}

Для аякса хорошо бы еще добавить функцию fail(), когда серверный скрипт вообще не отвечает.
$.ajax({
      type: "POST",
      url: "../js/mail.php", //Change
      data: th.serialize()
    }).done(function(e) {
     .......
    }).fail(function()
    {
      alert('Фатальная ошибка отправки!');
    });

Немного доработав скрипты, и получив некоторые сообщения, можно будет сориентироваться, какого рода ошибка у вас возникла.
Ответ написан
Комментировать
mrbagfreeman
@mrbagfreeman
Начинающий быдло кодер
Попробуйте скритп отправки формы добавить прямо в html. Не забудьте только поменять там пути. И попробуйте протестировать, должно помочь.
Ответ написан
fast-je
@fast-je
Пишу на php.
$("form").submit(function() { //Change
    var th = $(this);
    $.ajax({
      type: "POST",
      url: "../js/mail.php", //Change
      data: th.serialize()
    }).done(function(data) {
      console.log(data);
      
      setTimeout(function() {
        // Done Functions
        th.trigger("reset");
      }, 1000);
    });
    return false;
  });


Вообще тут принять данные и отправить их в консоль.

Далее

foreach($_REQUEST as $key => $value){ $str .= $key . ' = ' .$value . " \r\n "; } mail('твой почт', 'тест', $str); 

$method = $_SERVER['REQUEST_METHOD'];
//Script Foreach
$c = true;
if (!empty($_REQUEST)) {
 mail('твой почт', 'тест', "first check"); --------------------- 
  $project_name = trim($_REQUEST["project_name"]);
  $admin_email  = trim($_REQUEST["admin_email"]);
  $form_subject = trim($_REQUEST["form_subject"]);
  foreach ( $_REQUEST as $key => $value ) {
    if ( $value != "" && $key != "project_name" && $key != "admin_email" && $key != "form_subject" ) {
      $message .= "
      " . ( ($c = !$c) ? '<tr>':'<tr style="background-color: #f8f8f8;">' ) . "
        <td style='padding: 10px; border: #e9e9e9 1px solid;'><b>$key</b></td>
        <td style='padding: 10px; border: #e9e9e9 1px solid;'>$value</td>
      </tr>
      ";
    }
  }
$message = "<table style='width: 100%;'>$message</table>";
function adopt($text) {
  return '=?UTF-8?B?'.Base64_encode($text).'?=';
}
mail('твой почт', 'тест', "second check");   -----------
$headers = "MIME-Version: 1.0" . PHP_EOL .
"Content-Type: text/html; charset=utf-8" . PHP_EOL .
'From: '.adopt($project_name).' <'.$admin_email.'>' . PHP_EOL .
'Reply-To: '.$admin_email.'' . PHP_EOL;
mail($admin_email, adopt($form_subject), $message, $headers );
?>


Короче я тебе убрал POST И GET потому что ты делаешь повторяющиеся действия. в REQUST все данные из POST И GET.

Там где поставил mail функцию поставь туда свою почту и проверь до какого момента работает код.
Ответ написан
Ваш ответ на вопрос

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

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