0

我确信这是一个已被多次回答的问题,但在我花了数小时试图找出问题后,我的联系表仍然存在问题。

当我提交表单时,我会被重定向到带有谢谢消息的 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');
}
});
}

})
});

我的提交.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");

?>
4

2 回答 2

0

您的contact表格是否正在更新记录?如果是这样,那么我怀疑有两件事会出错。

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

2) 此外,如果您的本地主机尚未设置为发送电子邮件,那么您不应该期望收到它们。

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

其他有此问题的 stackoverflow 用户:

从本地主机发送电子邮件

从 localhost 发送邮件的选项

更新:绝对删除或注释掉电子邮件部分,直到您可以放心该功能正在运行。设置 localhost 邮件服务器需要做很多工作,所以在您确定可以发送电子邮件之前,我不会担心这些部分。在不涉及 AJAX 的测试文件中尝试此过程。您将收到大量警告和错误消息,以查看邮件是否正常工作。

在您知道可以在普通的 GET 页面中完成之前,不要尝试在 AJAX 中使用诸如电子邮件之类的功能。

于 2012-04-12T12:32:36.497 回答
0

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

在这种情况下,您的问题是您使用 localhost 发送 mail(),我假设它在 Windows 机器上。您不能发送 localhost,因为 Windows(通常)在 localhost 上没有邮件服务器。您需要为此使用一个实际的电子邮件服务器并将服务器地址分配给您的 php.ini。

这些设置:

SMTP = smtp.example.com
smtp_port = 25

更多信息在这里

于 2012-04-12T12:35:58.170 回答