@alexandrnevajno1

Php — то отправляет почту, то нет. Почему так?

Вот код HTML:
<form id="fb-form">
  <input class="fb-elem" type="text" name="name" placeholder="Ваше имя"/>
  <input class="fb-elem" type="text" name="mail" placeholder="Ваш email"/>
  <textarea class="fb-elem" name="text" placeholder="Ваше сообщение"></textarea>
  <button class="fb-btn">Отправить</button>
</form>


Вот код php:
<?php
$recepient = "[моя почта]";
$sitename = "[url моего сайта]";
$name = trim($_POST["name"]);
$mail = trim($_POST["mail"]);
$text = trim($_POST["text"]);
$message = "Имя: $name \nE-mail: $mail \nТекст: $text";
$pagetitle = "Новое сообщение с сайта \"$sitename\"";
mail($recepient, $pagetitle, $message, "Content-type: text/plain; charset=\"utf-8\"\n From: $recepient");
?>

Вот AJAX:
$('body').on('submit', '#fb-form', function(e) {
  e.preventDefault();
  var alright = true;
  $('.fb-elem').each(function() {
    if($(this).val().length == 0) {
      alert('Пожалуйста, заполните все поля!');
      alright = false;
      return false;
    }
  });
  if (alright == true) {
    $.ajax({
      type: "POST",
      url: "php/mail.php",
      data: $(this).serialize()
    }).done(function() {
      alert("Ваше сообщение успешно отправлено!");
      $("#fb-form").trigger("reset");
    });
  }
});

Если я отправляю такое письмо:
Имя: qqqq
E-mail: qqqq@gmail.com
Текст: Просто письмо

оно приходит.
Если такое:
Имя: qqqq
E-mail: qqqq@gmail.com
Текст: Тестовое письмо

оно НЕ приходит. Почему так?
Кажется, ему не нравится слово "Тестовое". Если написать так:
Имя: qqqq
E-mail: qqqq@gmail.com
Текст: Тестовое Тестовое Тестовое Тестовое

оно тоже не придет. Не могу понять, в чем проблема.
  • Вопрос задан
  • 210 просмотров
Пригласить эксперта
Ответы на вопрос 2
@D3lphi
Потому что к сообщениям отправленные функцией mail() очень подозрительно относятся почтовые сервисы. Ведь, у таких сообщений по сути, нет надежного адресата. Вы можете написать в адрес отправителя все, что захотите. Поэтому почтовые сервисы часто не пускают такие сообщения. Для отправки почты лучше использовать smtp протокол. С этим протоколом умеет работать библиотека PHPMailer.
Ответ написан
Комментировать
stanislav-belichenko
@stanislav-belichenko
Backend PHP Developer
Скорее всего, если вы получаете его на ящик на Gmail.com, там его режут спам-фильтры, считающие такие письма спамом. Выхода есть два:

1. Прикрутить авторизацию к отправке почты (используйте библиотеку PHPMailer - там все предельно просто.
2. Прикрутить к домену запись spf, чтобы отправленная с него (с его ip адреса) почта определялась не как спам.

Второй вариант менее надежный, все-таки лучше всего подойдет авторизация. Ну и для начала можете проверить, отправляются ли подобные письма на ящики, созданные на каком-либо домене напрямую, без использования сторонних email-серверов. Но это если у вас есть такая возможность.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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