Форма php не отправляется на почту

196
14 февраля 2022, 11:10
jQuery(document).ready(function($) {
$(".ajax-contact-form").submit(function() {
var str = $(this).serialize();
$.ajax({
type: "POST",
url: "contact.php",
data: str,
success: function(msg) {
if(msg == 'OK') {
result = '<p>Ваш заказ принят</p>';
$(".fields").hide();
} else {
result = msg;
}
$('.note').html(result);
}
});
return false;
});
});
<!DOCTYPE html>
<html lang="ru">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <meta http-equiv="x-ua-compatible" content="ie=edge">
  <title>Заголовок</title>
</head>
<body>
    <footer>
        <h2>Контактная форма</h2>
        <div class="form-container">
            <div class="note"></div>
            <div class="fields">
                <form class="ajax-contact-form" action="">
                    <p><input type="text" name="name" value="" placeholder="Имя"></p>
                    <div class="row">
                        <div class="col"><input type="tel" name="tel" value="" placeholder="Телефон"></div>
                        <div class="col"><input type="email" name="email" value="" placeholder="E-mail"></div>
                        </div>
                    <label>Текст</label>
                    <textarea name="message" cols="40" rows="3"></textarea>
                    <input type="submit" name="submit" class="form-container__btn" value="Отправить">
                </form>
            </div>
        </div>
    </footer>
  <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>
    <script src="contactform.js"></script>
</body>
</html>
<?php
$post = (!empty($_POST)) ? true : false;
if($post)
{
$email = trim($_POST['email']);
$name = htmlspecialchars($_POST['name']);
$email = htmlspecialchars($_POST['email']);
$message = htmlspecialchars($_POST['message']);
$tel = htmlspecialchars($_POST["tel"]);
$error = '';
if(!$name)
{
$error .= 'Пожалуйста введите ваше имя<br />';
}
// Проверка телефона
function ValidateTel($valueTel)
{
$regexTel = "/^(([^<>()[\]\\.,;:\s@\"]+(\.[^<>()[\]\\.,;:\s@\"]+)*)|(\".+\"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/";
if($valueTel == "") {
return false;
} else {
$string = preg_replace($regexTel, "", $valueTel);
}
return empty($string) ? true : false;
}
if(!$email)
{
$error .= "Пожалуйста введите email<br />";
}
if($email && !ValidateTel($email))
{
$error .= "Введите корректный email<br />";
}
if(!$error)
// (length)
if(!$message || strlen($message) < 1)
{
$error .= "Введите ваше сообщение<br />";
}
if(!$error)
{

$name_tema = "=?utf-8?b?". base64_encode($name) ."?=";
$subject ="Новая заявка с сайта BeActive.ru";
$subject1 = "=?utf-8?b?". base64_encode($subject) ."?=";
/*
$message ="\n\nСообщение: ".$message."\n\nИмя: " .$name."\n\nТелефон: ".$tel."\n\n";
*/
$message1 ="\n\nИмя: ".$name."\n\nТелефон: " .$tel."\n\nE-mail: " .$email."\n\nСообщение: ".$message."\n\n";

$header = "Content-Type: text/plain; charset=utf-8\n";
$header .= "From: Новая заявка <berestovayamaria@gmail.com>\n\n";
$mail = mail("berestovayamaria@gmail.com", $subject1, iconv ('utf-8', 'windows-1251', $message1), iconv ('utf-8', 'windows-1251', $header));
if($mail)
{
echo 'OK';
}
}
else
{
echo '<div class="notification_error">'.$error.'</div>';
}
}
?>
Answer 1

Во-первых, html страница в UTF-8, переведите php в utf8 и не занимайтесь перегоном в windows-1251 и обратно.

Для этого достаточно добавить в сам файл:

header('Content-Type: text/html; charset=utf-8');

а в .htaccess

AddDefaultCharset UTF-8

Это уберет танцы с бубном, которые вы используете с iconv() и base64_encode() и позволит работать с данными напрямую в UTF8.

У вас синтаксическая ошибка, и скорее всего скрипт вылетает на ошибку 500 из-за этого куска кода:

if($mail)
{
echo 'OK';
}
} // лишняя скоба 
else
{
echo '<div class="notification_error">'.$error.'</div>';
}

mail() функция может не работать. Сделайте простой тест, например:

<?php
$header = "Content-Type: text/plain; charset=utf-8\n";
$header .= "From: Новая заявка <berestovayamaria@gmail.com>\n\n";
$mail = mail("berestovayamaria@gmail.com", "test", "test", $header);
if($mail){
   echo 'OK';
} else {
   echo '<div class="notification_error">'.$error.'</div>';
} 
?>

Если при простом тесте сообщение не дойдет - используйте phpMailer и SMTP сервер https://snipp.ru/php/smtp-phpmailer

READ ALSO
ReferenceError: Phaser is not defined

ReferenceError: Phaser is not defined

Здравствуйте у меня проблема с PhaserВ браузере в консоль мне выдаёт вот такую ошибку - ReferenceError: Phaser is not defined

134
Не работает метод connect в Redux

Не работает метод connect в Redux

Пишу тестовый проект на связке React-Redux и почти сразу возникла проблема: не работает метод connect:

125
Помогите с рекурсией

Помогите с рекурсией

Задача - сделать функцию для поиска по объекту сложной вложенности, нужно найти значение ячейки с именем "treasure" вот пример проверки:

110