【问题标题】:Error in sending mail from php file [duplicate]从php文件发送邮件时出错[重复]
【发布时间】:2015-12-08 16:32:42
【问题描述】:

我对使用 php 很陌生,我目前正在尝试建立一个个人网站。我在底部的页面中有一个联系表格,我似乎无法开始工作并向自己发送一封包含客户所写消息的电子邮件。该表单具有以下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!';
        }
    }
?>

我注意到了几件事:当我替换“个人电子邮件”时,当我在我的网站上测试联系表时没有收到电子邮件。但是,当我在邮件语句之后取消注释 echo $_POST['postname'] 时(我将其解释为 mail=true 所以邮件发送)然后变量回显到我的网站。但是,$result 变量并没有像我想要的那样出现在#result div 中。我哪里错了?是否有我犯的错误需要知道以供将来参考? html php 之间的这个概念对我来说还是有点新奇!

【问题讨论】:

    标签: javascript php forms email


    【解决方案1】:

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

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

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

    【讨论】:

    • type="button" 的输入不应该提交表单。
    【解决方案2】:

    首先,当 mail 函数返回 TRUE 时,它确实意味着只接受了一条消息进行投递。这并不意味着它已经或将要交付甚至从服务器发送出去。 我还会检查 SPAM 文件夹,因为这种从 php 脚本发送邮件的方法经常会让您陷入垃圾邮件。它只是不使用 SMTP 和 real box 来发送邮件。

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

    https://github.com/PHPMailer/PHPMailer

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

    【讨论】:

      【解决方案3】:

      您的电子邮件行有语法错误:您应该将AND 更改为&amp;&amp;。而不是使用硬编码的帖子数据,您应该使用$("#formId").serialize(),作为数据值。

      【讨论】:

      • 在这种情况下 AND 很好。 AND 和 && 之间的区别在于 && 的优先级高于 = 但 AND 没有。所以 $a = $b && $c 与 $a = $b AND $c 不同,后者就像 ($a = $b) && $c。
      猜你喜欢
      • 2018-04-27
      • 2014-09-08
      • 2017-12-05
      • 2013-07-25
      • 2020-01-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多