2016-06-09 2 views
0

Попытка получить контактную форму AJAX для отправки электронной почты, но она не работает, и после исследования throrough я все еще не могу понять, что не так, поэтому, возможно, один из вас может Помогите.PHP AJAX контактная форма dosen't отправить электронное письмо

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">Thank you for contact us. As early as possible we will contact you</p>').delay(3000).fadeOut(); 
    }); 
}); 

PHP

<?php  
if(isset($_POST['submit'],$_POST['name'],$_POST['email'],$_POST['message'])){ 
$name = $_POST['name']; 
$email = $_POST['email']; 
$message = $_POST['message']; 

$email_from = $email; 
$email_to = '[email protected]'; 

$body = 'Name: ' . $name . "\n\n" . 'Email: ' . $email . "\n\n" . "\n\n" . 'Message: ' . $message; 

$success = mail($email_to, $subject, $body, 'From: <'.$email_from.'>'); 

$response = array(); } 

echo json_encode($response); 

die; 
?> 

HTML

<div class="contact-form bottom"> 
    <h2>Send a message</h2> 
    <form id="main-contact-form" name="contact-form" method="post" action="sendemail.php"> 
     <div class="form-group"> 
      <input type="text" id="name" name="name" class="form-control" required="required" placeholder="Name"> 
     </div> 
     <div class="form-group"> 
      <input type="email" id="email" name="email" class="form-control" required="required" placeholder="Email Id"> 
     </div> 
     <div class="form-group"> 
      <textarea name="message" id="message" required class="form-control" rows="8" placeholder="Your text here"></textarea> 
     </div>       
     <div class="form-group"> 
      <input type="submit" name="submit" class="btn btn-submit" value="Submit"> 
     </div> 
    </form> 
</div> 

Пожалуйста, помогите! У меня нет вариантов.

+0

Пожалуйста, проверьте то есть порт 25 открыт для отправки почты. –

ответ

0

Параметр данных отсутствует в вашей функции ajax.

var form = $('#main-contact-form'); 

form.submit(function(event){ 
    event.preventDefault(); 
    var form_status = $('<div class="form_status"></div>'); 
    $.ajax({ 
     url: $(this).attr('action'), 
     type: 'POST', 
     data: { // pass the data values sending through ajax 
       name : name, 
       email : email, 
       message : message 
     }, 
     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">Thank you for contact us. As early as possible we will contact you</p>').delay(3000).fadeOut(); 
    }); 
}); 

Вы можете получить значение, которые вы хотите отправить через через AJAX на ваш PHP скрипт следующим образом:

var name = $('#name').val(); 
var email = $('#email').val(); 
var message = $('#message').val(); 

После того, как вы получили эти значения можно вызвать функцию АЯКСА проходящие их в качестве параметров данных и установление типа данных как POST. Затем в вашем скрипте PHP вы можете получить значения сообщений так же, как и вы.

+0

Не могли бы вы дать мне ясный пример для моего кода? – Alexander

+0

Я уже предоставил исправленный код. Вам нужно только передать в качестве параметра значения, которые вы хотите передать на ваш php-скрипт. –

+0

Я добавил '' name = "+ name +" & email = "+ email +" & message = "+ message", и он не работает – Alexander

0

где $ subject инициализирован? Я не вижу, чтобы он получал значение в php-коде, прежде чем отправлять его в почтовую функцию.

+0

Должен ли я определить тему в PHP-коде? – Alexander

+0

Сделайте одну вещь, добавив некоторое значение в объект $ subject перед вызовом функции почты, затем используйте успех, чтобы проверить, правильно ли выполняется вызов ajax. –

0

Для отправки электронной почты вам нужно настроить что-то вроде этого, также вам нужно использовать Менее безопасные приложения для включения (в случае Gmail). Чтобы включить Less Secure Вам нужно войти в свою учетную запись, то нажмите следующую ссылку:

http://know.mailsbestfriend.com/smtp_error_password_command_failed_5345714-1194946499.shtml

public function sendEmail($email, $subject, $message) {                         
    $config= array(
     'protocol' => 'smtp', 
     'smtp_host' => 'ssl://smtp.gmail.com', 
     'smtp_port' => 465, 
     'smtp_user' => 'examp[email protected]', 
     'smtp_pass' => 'xxxxxxx', 
     'mailtype' => 'html', 
     'charset' => 'iso-8859-1', 
     'wordwrap' => TRUE 
    ); 

    $this->load->library('email', $config); 
    $this->email->set_newline("\r\n"); 
    $this->email->initialize($config); 

    $this->email->from('localhost', 'Team Name'); 
    $this->email->to($email); 
    $this->email->subject($subject); 
    $this->email->message($message);  
    if(!$this->email->send()){ 
     echo $this->email->print_debugger(); 
    } 
} 
+0

Код PHP выполняет свою работу и отправляет электронное письмо, которое я удаляю JS-код, поэтому нет проблем там. – Alexander

+0

В любом случае, это может помочь в будущем –

Смежные вопросы