从php文件发送邮件时出错

时间:2015-09-12 03:32:10

标签: javascript php forms email

我很擅长使用p​​hp,而我正在尝试建立一个个人网站。我在底部的页面中有一个联系表单,我似乎无法开始工作并向自己发送客户端写入的消息的电子邮件。表单有以下html:

    <form method="post">
                <div class="form-group">
                    <label for="name">Your name:</label>
                    <input type="text" id="name" class="form-control" placeholder="Your name" />

                </div>
                <div class="form-group">
                    <label for="email">Your email:</label>
                    <input type="email" id="email" class="form-control"   placeholder="Your email"/>

                </div>
                <div class="form-group">
                    <label for="comment">Message</label>
                    <textarea class="form-control" id="comment"></textarea>

                </div>
                <input type="button" class="btn btn-warning" value="submit" id="sendEmail"/>
            </form>

我正在使用以下JavaScript将表单放入php文件并向自己发送电子邮件。这里是JavaScript:

<script>
$(".contentContainer").css("min-height",$(window).height());

$("result").hide();

$("#sendEmail").click(function(){

    var name = $("#name").val();
    var email = $("#email").val();
    var comment = $("#comment").val();

    $.post("validate.php",
    {postname:name,postemail:email,postcomment:comment},
    function(data){

        $("#result").html(data).fadeIn();
    });
});

</script>

这是我正在使用的php文件:

    <?php
$error = NULL;
    if (!$_POST['postname']) {
        $error="<br />Please enter your name";
    }
    if (!$_POST['postemail']) {
        $error.="<br />Please enter your email address";
    }
    if (!$_POST['postcomment']) {
        $error.="<br />Please enter a comment";
    }
    if ($_POST['postemail']!="" AND !filter_var($_POST['postemail'], FILTER_VALIDATE_EMAIL)) { 
        $error.="<br />Please enter a valid email address";
    }
    if($error !=NULL){
        $result='<div class="alert alert-danger"><strong>There were error(s)
        in your form:</strong>'.$error.'</div>';
    } else{
        if (mail("PERSONAL EMAIL", "Comment from website", "Name: ".$_POST['postname ']."
        Email: ".$_POST['postemail']." 
        Comment: ".$_POST['postcomment'])) {

            //echo $_POST['postname']

            $result='thank you!';
        } else{
            $result='There was an error sending your message! Try again later!';
        }
    }
?>

我注意到的一些事情:当我更换“个人电子邮件”时,我在网站上测试联系表单时没有收到电子邮件。但是,当我在邮件声明(我将其解释为mail = true以便发送邮件)之后取消注释echo $ _POST ['postname']时,变量回显到我的网站。但是,$ result变量不像我想要的那样出现在#result div中。我错了什么?我做了一个错误,我需要知道以备将来参考吗? html&lt; - &gt;之间的这个概念php对我来说还是一种新鲜事!

3 个答案:

答案 0 :(得分:2)

首先,当邮件功能返回TRUE时,它仅表示已接受邮件传递。它并不意味着它已经或将要从服务器发送或甚至发送出去。 我也会查看垃圾邮件文件夹,因为这种从php脚本发送邮件的方法经常会让你陷入垃圾邮件。它只是不使用SMTP和真实的盒子发送邮件。

我建议使用PHPMailer通过真实邮箱发送邮件。它还为您提供有关发送电子邮件时的错误的一些信息。

https://github.com/PHPMailer/PHPMailer

第二个问题是你不回应$ result。这就是为什么它没有发送给JS。

答案 1 :(得分:0)

首先,你必须在你的jQuery代码中写一个preventDefault()句子来参加按钮sendEmail的点击,否则,脚本会提交一个表单。

使用jQuery在客户端验证电子邮件等是一种很好的做法。

另一个好的做法是确保您使用PHP中的$_POSTisset($_POST['name'])变量上索引righ值。

答案 2 :(得分:0)

您在电子邮件行中遇到语法错误:您应该更改AND的{​​{1}}。而不是使用硬编码的发布数据,您应该使用&&作为数据值。