JQuery 3 + Ajax + PHP форма отправки почты не отправляет почту

Я пытался переписать форму отправки почты jQuery + PHP, но, несмотря на попытки 3 метода, все еще выдает 500 Internal Server Error. Я переписываю, потому что переношу сайт на jQuery 3 и работаю над улучшением производительности и соответствием стандартам с унаследованной мной кодовой базой.

Я знаю, что 500 - это ошибка сервера, и сайт размещен на MS IIS, но устаревший код работает на том же сервере, поэтому в моей реализации должно быть что-то особенное.

Может, ты видишь то, что я пропустил?

Приведенный ниже код в основном следует за этот пример о переполнении стека, но я также безуспешно пробовал следовать этот YouTube и этот учебник.

Надеюсь на ответ здесь после того, как исчерпал другие варианты. Заранее спасибо!

HTML (упрощенный)

<form action = "send_mail_facility2.php" id = "facility-contact-form" method = "post" autocomplete = "on">
  <!-- MAIN FIELDS -->
  <input id = "sendTo" name = "sendTo" type = "text" value = "Facility One" style = "display: none;">
  <input id = "name" name = "name" type = "text" placeholder = "Name" required>
  <input id = "email" name = "email" type = "email" placeholder = "Email" required>
  <input id = "phone" name = "phone" type = "text" placeholder = "Phone number">
  <textarea id = "message" name = "message" type = "text" placeholder = "Message"></textarea>

  <!-- ADDITIONAL FIELDS - separate js shows section when checkbox selected -->
  <input id = "infopack-checkbox" type = "checkbox" name = "checkbox" value = "checkbox"><span class = "information-pack">&nbsp;I would like to receive an information pack.</span>
  <div id = "address-details">
    <input id = "address" name = "address" type = "text" placeholder = "Address">
    <input id = "city" name = "city" type = "text" placeholder = "City">
    <input id = "postcode" name = "postcode" type = "text" placeholder = "Postcode">
  </div>

  <!-- reCAPTCHA html & js -->

  <input id = "facility-submit" name = "submit" type = "submit" value = "Send request" disabled style = "opacity: 0.3;"> <!-- disabled & inline style for captcha -->
  <p class = "status" style = "display: none" role = "alert">Thanks, someone will be in contact with you regarding your enquiry soon.</p>
</form>

JS

$(function(){
  var request;
  $("#facility-contact-form").on("submit", function(event){
    event.preventDefault();
    if (request) {
      request.abort();
    }
    var $form = $(this);
    var $inputs = $form.find("input, select, button, textarea");
    var serializeData = $form.serialize();
    $inputs.prop("disabled", true);
    request = $.ajax({
      url: "send_mail_facility2.php",
      type: "post",
      data: serializeData
    });
    request.done(function (response, textStatus, jqXHR){
      console.info("Hooray, it worked!");
    });
    request.fail(function (jqXHR, textStatus, errorThrown){
      console.error("The following error occurred: "+
                   textStatus, errorThrown);
    });
    request.always(function () {
      $inputs.prop("disabled", false);
    });
  });
});

PHP

if ($_SERVER["REQUEST_METHOD"] == "POST") {

  // email headers
  $to       = $_POST["sendTo"];
  $subject  = "Custom subject line";
  $headers  = "From: NoReply &lt;[email protected]&gt;";

  // sender data
  $name     = $_POST["name"];
  $email    = filter_var(trim($_POST["email"]), FILTER_SANITIZE_EMAIL);
  $phone    = trim($_POST["phone"]);
  $message  = trim($_POST["message"]);
  $address  = isset($_POST["address"]) ? trim($_POST["address"]) : null;
  $city     = isset($_POST["city"]) ? trim($_POST["city"]) : null;
  $postcode = isset($_POST["postcode"]) ? trim($_POST["postcode"]) : null;

  //define recipients
  $sendTo = $_POST["sendTo"];

  if ($sendTo == 'Facility One') {
    $to = '[email protected]';
  } elseif ($sendTo == 'Facility Two') {
    $to = '[email protected]';
  } elseif ($sendTo == 'Facility Three') {
    $to = '[email protected]';
  }

  if (isset($_POST['checkbox'])) {
    $infoPack = "Yes";
  } else {
    $infoPack = "No";
  }
  if (empty($_POST["address"])) {
    $address = "N/A";
  } else {
  }
  if (empty($_POST["city"])) {
    $city = "N/A";
  } else {
  }
  if (empty($_POST["postcode"])) {
    $postcode = "N/A";
  } else {
  }

  // email content
  $content = "Enquiry for facility: $sendTo\n\n";
  $content .= "Name: $name\n\n";
  $content .= "Email: $email\n\n";
  $content .= "Phone: $phone\n\n";
  $content .= "Message:\n$message\n\n";
  $content .= "Would user like to receive an information pack?: $infoPack\n\n";
  $content .= "Address: $address\n\n";
  $content .= "City: $city\n\n";
  $content .= "Postcode: $postcode\n\n\n";
  $content .= "Static footer message here\n\n";

  // Send the email
  $success = mail($to, $subject, $content, $headers);
  if ($success) {
    http_response_code(200);
    echo "Thanks, someone will be in contact with you regarding your enquiry soon.";
  } else {
    http_response_code(500);
    echo "Oops, something went wrong - we couldn't send your message.";
  }

} else {
    // Not a POST request, set a 403 (forbidden) response code.
    http_response_code(403);
    echo "Oops, something went wrong - we couldn't send your message.";
}

Любые идеи?

вы выкидываете ошибку http_response_code(500);

user9487972 02.05.2018 01:00

@smith да, конечно. Но это потому, что это не работает. Если я удалю эту строку, электронная почта все равно не будет отправлена ​​и т. д.

Erland 02.05.2018 01:14

ну ладно, но мне не нужно читать ваш код, чтобы добраться до этой точки, 500 не проблема, так как вы ее генерируете.

user9487972 02.05.2018 01:16

Возможный дубликат Функция почты PHP не завершает отправку электронной почты

user9487972 02.05.2018 01:17

не используйте php nail (), его очень простое использование: github.com/PHPMailer/PHPMailer включает его отладку, и он сообщит вам о проблеме.

user9487972 02.05.2018 01:19

Ваш скрипт уже возвращает ошибки (что заставляет это терпеть неудачу) - pastebin.com/pDAyBNs1

Darren 02.05.2018 01:38

Спасибо, @Darren, думаю, теперь все работает! Извините я новичок в этом ... где вы вытащили эти ошибки? Они не отображаются в моем error_log

Erland 02.05.2018 01:48

Я просто выполнил запрос jQuery через вкладку сети Chrome. Когда вы отправляете форму, просмотрите запросы к: send_mail_facility2.php, и он выдаст ошибки

Darren 02.05.2018 01:50
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
8
826
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Спасибо @Darren, который указал мне на ответ об ошибке.

Проблема, похоже, заключалась только в синтаксисе заголовка from, который я скопировал с шага 3 этот учебник.

Я изменился:

$headers  = "From: NoReply &lt;[email protected]&gt;";

к:

$headers = "FROM: NoReply <[email protected]>";

Я не получил этого от вопрос / ответ, который был указан как дубликат, насколько полезен этот ответ.

Для других новичков PHP используйте вкладку «Сеть» инструментов разработчика Firefox / Chrome, запустите отправку формы, отфильтруйте свой php-файл, а затем просмотрите вкладку «Ответ», чтобы увидеть полный ответ с любыми ошибками.

Хороший напарник, нам всегда помогают «простые» вещи, ха-ха!

Darren 02.05.2018 02:11

Другие вопросы по теме