2016-06-09 114 views
0

试图获得一个AJAX联系表格发送电子邮件,但它不起作用,经过深入研究,我仍然不能得到什么错误,所以也许你们中的一个人可以帮帮我。PHP AJAX联系表格不能发送电子邮件

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(); 

一旦获得这些值,你可以调用Ajax的功能传递那些数据参数并将数据类型设置为POST。然后在你的PHP脚本中,你可以像你一样获得帖子值。

+0

你能给我一个清晰的例子,我的代码? – Alexander

+0

我已经提供了更正的代码。您只需要将参数传递给您的PHP脚本。 –

+0

我已经添加了''name =“+ name +”&email =“+ email +”&message =“+ message,'它不起作用 – Alexander

0

$主体在哪里初始化?在发送邮件功能之前,我没有看到它在获取php代码的价值

+0

我应该在php代码中定义一个主题吗? – Alexander

+0

在调用mail函数之前,做一件事情给$ subject增加一些值,然后使用成功来检查ajax调用是否正确 –

0

要发送电子邮件,您需要配置类似的东西,也需要使用 要启用的安全性较低的应用程序(对于Gmail )。启用安全性较低,你 需要登录到您的帐户,然后点击下面的链接:

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' => '[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

好吧,反正它可能在未来有所帮助 –