Jquery/Ajax联系表格不发送电子邮件

问题描述:

我确定这是一个已被多次回答的问题,但花费数小时试图找出问题后,我仍然遇到与联系表单有关的问题。Jquery/Ajax联系表格不发送电子邮件

当我提交表单时,我收到了重新定向至submit.php页面的谢谢信息,但没有邮件发送到我的$ email_to地址。

这也许值得一提的是,这个代码是一个WordPress主题里面,它是目前我的本地机器上运行(这会不会影响什么关系吗?)

谁能告诉我,如果有什么我做错了这里?我有一种感觉,我错误地使用了插件,对于这个ajax游戏来说相当新颖!

我使用以下插件:

  • jQuery的表格插件(http://pastebin.com/cC5899ns)
  • jQuery验证(http://pastebin.com/GyYuVwAH)

这里是我的HTML:

<div id="footer"> 
       <h3>Contact</h3> 
       <div id="preview"></div> 
       <form name="form" id="form" action="<?php bloginfo('template_directory'); ?>/_/inc/submit.php" method="post"> 
        <input type="text" value="Your name" name="name" /> 
        <input type="tel" value="Your contact number" name="email" /> 
        <textarea name="message">Quick Note</textarea> 
        <button>Submit</button> 
       </form> 
      </div> 

我的JS:

$(document).ready(function(){ 

$('#form').validate(
{ 
rules: 
{ 
"name":{ 
required:true, 
maxlength:40 
}, 
"email":{ 
required:true, 
email:true, 
maxlength:100 
}, 
"message":{ 
required:true 
}}, 

messages: 
{ 
"name":{ 
required:"This field is required" 
}, 
"email":{ 
required:"This field is required", 
email:"Please enter a valid email address" 
}, 
"message":{ 
required:"This field is required" 
}}, 

submitHandler: function(form){ 
$(form).ajaxSubmit({ 
target: '#preview', 
success: function() { 
alert('hello'); 
$('#foooter').slideUp('fast'); 
} 
}); 
} 

}) 
}); 

我Submit.php

<?php 
include("db.php"); 

if($_SERVER["REQUEST_METHOD"] == "POST") 
{ 
    $name=mysql_real_escape_string($_POST['name']); 
    $email=mysql_real_escape_string($_POST['email']); 
    $message=mysql_real_escape_string($_POST['message']); 
    if(strlen($name)>0 && strlen($email)>0 && strlen($message)>0) 
     { 
      $email_to = "*********"; 
      $email_from = $email; 
      $email_subject = "Contact Form"; 
      $email_message = stripslashes($message); 

      $headers = 'From: '.$email_from."\r\n" . 
      'Reply-To: '.$email_from."\r\n"; 

      mail($email_to, $email_subject, $email_message, $headers); 

      $time=time(); 
      mysql_query("INSERT INTO contact (name,email,message,created_date) VALUES('$name','$email','$message','$time')"); 
      echo "<h1>Thank You !</h1>"; 
     } 
} 
?> 

我db.php中

<?php 
$mysql_hostname = "localhost"; 
$mysql_user = "root"; 
$mysql_password = "*****"; 
$mysql_database = "******"; 
$prefix = ""; 
$bd = mysql_connect($mysql_hostname, $mysql_user, $mysql_password) or die("Opps some thing went wrong"); 
mysql_select_db($mysql_database, $bd) or die("Opps some thing went wrong"); 

?> 
+1

你需要一步一步经过追查,看看它是怎么回事错了 - 您所提供的终端到终端的过程,但你应该能够缩小这个下来自己。警报('hello')正在显示吗?使用萤火虫或类似的东西来检查请求是否被发送到服务器 - 最后你需要检查保存和数据库代码。 – 2012-04-12 12:23:01

+0

如果您使用的是Chrome,则有一个Javascript控制台(当您按下扳手按钮时,在“Tools”中)。这将知道所有这些错误和警告(如果有的话)。 – 2012-04-12 12:23:07

+0

这与您的错误没有任何关系,但是在$('#footer')。slideUp('fast'); “页脚”拼写错误。 :) – Jan 2012-04-12 12:28:55

是您的contact表中获取与记​​录更新?如果是这样,那么我怀疑有两件事情会出错。

1)从mail的文档:Lines should not be larger than 70 characters.

2)另外,如果你的本地主机没有被设置为发送电子邮件,那么你不应该指望得到他们。

如果您的contact表正在更新,那么我会假设#2是您的问题。

其他计算器用户提供这样一个问题:

Sending email from localhost

Options for mailing from localhost

更新: 绝对删除或注释掉的电子邮件部分,直到你可以安慰自己的是,功能正在工作。设置本地主机邮件服务器需要很多工作,所以我不担心这些部分,除非您确定可以发送电子邮件。在没有涉及AJAX的测试文件中尝试此过程。您将有足够的警告和错误消息来逐步查看该邮件是否正常工作。

不要试图获取功能,如电子邮件内AJAX工作,直到你知道你可以在一个正常的GET页面做到这一点。

+0

谢谢你的帮助veeTrain - 它INFACT看起来像我仍然有从我的本地主机发送邮件的问题(你是对的这不完全直截了当!)。我按照建议做了一个测试,它在一个活动的服务器上工作,但不在我的本地主机上。我会考虑这虽然,因为我相信我的MAMP Pro的帐户,我应该能够更改此设置... – remi90 2012-04-12 15:00:38

+0

这是伟大的听到。良好的工作正确执行你的功能。 – veeTrain 2012-04-12 15:04:29

它添加到数据库中正确的吗?所以唯一的问题是电子邮件没有被发送?

在这种情况下,你的问题是,你正在使用本地主机发送邮件(),我以为是在Windows机器上。由于Windows(通常)在本地主机上没有邮件服务器,因此无法发送本地主机。您需要为此使用实际的电子邮件服务器,并将服务器地址分配给您的php.ini。

这些设置:

SMTP = smtp.example.com 
smtp_port = 25 

更多信息here