Я получаю пустое письмо от php и js

Пожалуйста, помогите мне с расшифровкой, какова настоящая проблема. Проблема в том, что я продолжаю получать пустое электронное письмо, несмотря на все мои настройки и исследования этого кода. Ниже приведены мои html, javascript (ajax) и php-коды.

Код HTML: файл с именем contact.html

<form id="main-contact-form" class="contact-form" name="contact-form" method="post" action="sendemail.php"> <div class="col-sm-5 col-sm-offset-1"> <div class="form-group"> <label>Name *</label> <input type="text" name="name" class="form-control" required="required"> </div> <div class="form-group"> <label>Email *</label> <input type="email" name="email" class="form-control" required="required"> </div> <div class="form-group"> <label>Phone</label> <input type="number" class="form-control"> </div> <div class="form-group"> <label>Company Name</label> <input type="text" class="form-control"> </div> </div> <div class="col-sm-5"> <div class="form-group"> <label>Subject *</label> <input type="text" name="subject" class="form-control" required="required"> </div> <div class="form-group"> <label>Message *</label> <textarea name="message" id="message" required="required" class="form-control" rows="8"></textarea> </div> <div class="form-group"> <button type="submit" name="submit" class="btn btn-primary btn-lg" required="required">Submit Message</button> </div> </div> </form> 

Код AJAX: файл с именем main.js

 // Contact form var form = $('#main-contact-form'); form.submit(function(event){ event.preventDefault(); var form_status = $('<div class="form_status"></div>'); $.ajax({ url: $(this).attr('action'), beforeSend: function(){ form.prepend( form_status.html('<p><i class="fa fa-spinner fa-spin"></i> Email is sending...</p>').fadeIn() ); } }).done(function(data){ form_status.html('<p class="text-success">' + data.message + '</p>').delay(3000).fadeOut(); }); }); 

PHP-код: файл с именем sendemail.php

 <?php header('Content-type: application/json'); $status = array( 'type'=>'success', 'message'=>'Thank you for contact us. As early as possible we will contact you ' ); $name = @trim(stripslashes($_POST['name'])); $email = @trim(stripslashes($_POST['email'])); $subject = @trim(stripslashes($_POST['subject'])); $message = @trim(stripslashes($_POST['message'])); $email_from = $email; $email_to = 'email@email.com';//replace with your email $body = 'Name: ' . $name . "\n\n" . 'Email: ' . $email . "\n\n" . 'Subject: ' . $subject . "\n\n" . 'Message: ' . $message; $success = @mail($email_to, $subject, $body, 'From: <'.$email_from.'>'); echo json_encode($status); die; ?> 

с этим я продолжаю получать пустое электронное письмо, как показано ниже

 Name: Email: Blank Phone: Blank Subject: Blank Message: Blank 

Вы пробовали с помощью die () в конце вашего скрипта? Я думаю, что вы можете слишком быстро убить свою страницу.

Также попробуйте создать улов следующим образом:

 if (!mail(...)) { // Reschedule for later try or panic appropriately! } 

Кроме того, вы подавляете предупреждения с @ before mail (); Попробуйте удалить @.

Изменить: Также попробуйте удалить триммеры.

Вы не задали данные во время вызова ajax, возможно, это ваша проблема.

Когда я тестирую свой код, я вижу, что там возникает GET-запрос, хотя вы определяете mehtod как POST в атрибуте формы. (Возможно, поэтому JQuery использует GET по умолчанию …). Таким образом, $ _POST ['name'] пуст, потому что параметр находится в $ _GET ['name'].

И я не могу увидеть параметры запроса, когда я отправлю форму. (Возможно, поэтому свойство 'data' не задано.)

Попробуйте выполнить $ .ajax с помощью следующих:

 method: 'POST' data: $(this).serialize() 

БОЛЬШОЕ СПАСИБО всем вам, ребята (@Mateusz Klimentowicz, @ Mat VP, @ Jose Manuel Abarca Rodríguez, @ Vladimir Nu). Я фактически выполнил ваши инструкции и в итоге исправил как файл JS, так и файл PHP, как показано ниже:

JS-файл:

 // Contact form var form = $('#main-contact-form'); form.submit(function(event){ event.preventDefault(); // Serialize the form data. var formData = $(form).serialize(); var form_status = $('<div class="form_status"></div>'); $.ajax({ type: 'POST', url: $(this).attr('action'), data: formData, beforeSend: function(){ form.prepend( form_status.html('<p><i class="fa fa-spinner fa-spin"></i> Email is sending...</p>').fadeIn() ); } }).done(function(data){ form_status.html('<p class="text-success">' + data.message + '</p>').delay(3000).fadeOut(); }); }); 

Хотя код PHP стал следующим:

 <?php $status = array( 'type'=>'success', 'message'=>'Thank you for contacting us. As soon as possible we will contact you!' ); $fail = array( 'type'=>'fail', 'message'=>'Please try again. Your mail could not be delivered!' ); $name = @trim(stripslashes($_POST['name'])); $email = @trim(stripslashes($_POST['email'])); $subject = @trim(stripslashes($_POST['subject'])); $message = @trim(stripslashes($_POST['message'])); $email_from = $email; $email_to = 'email@mail.com';//replace with your email $body = 'Name: ' . $name . "\n\n" . 'Email: ' . $email . "\n\n" . 'Subject: ' . $subject . "\n\n" . 'Message: ' . $message; $success = @mail($email_to, $subject, $body, 'From: <'.$email_from.'>'); header('Content-type: application/json'); if($success){ echo json_encode($status); } else{ echo json_encode($fail); } ?> 

И после использования этого кода, как указано ниже, я не получаю пустой почтовый адрес. Электронная почта теперь отправляется с ее содержанием. Огромное спасибо.