【问题标题】:SMTP PHP Form success but success message not showingSMTP PHP 表单成功但未显示成功消息
【发布时间】:2013-11-08 19:09:25
【问题描述】:

我下面的代码有效,并且发送了表单数据。然而,在成功消息中重置表单和显示/淡入淡出的代码不是

<?php 
    require("class.phpmailer.php");
    $mail = new PHPMailer();

    // Validation without reload
    if ($_POST) { 

        // SMTP & Sendgrid settings
        $mail->IsSMTP();
        $mail->Host = "smtp.site.com";
        $mail->Port = "587";
        $mail->SMTPAuth = "true";   // Enable SMTP authentication
        $mail->Username = "username";  
        $mail->Password = "password";
        $mail->SMTPSecure = ''; // Enable encryption, 'ssl' also accepted

        // Email headers and body
        $mail->SetFrom("email@email.com");
        $mail->AddAddress("email@email.com");

        $mail->Subject  = "Message from site.com";
        $mail->WordWrap = 50;

        // Form fields
        $FirstName = $_POST['FirstName'];
        $LastName = $_POST['LastName'];
        $Company = $_POST['Company'];
        $JobTitle = $_POST['JobTitle'];
        $Email = $_POST['Email'];
        $Phone = $_POST['Phone'];
        $Message = $_POST['Message'];

        // Assign variables to body. ALWAYS after the variables are assigned.
        $mail->Body     = "You have a new message from your contact form on ShipmentHQ.com \n First Name: $FirstName \n Last Name: $LastName \n Company: $Company \n Job Title: $JobTitle \n Email: $Email \n Phone: $Phone \n Message: $Message";

        if(!$mail->Send()) {
          alert('Thanks, your message has been sent.');
          echo 'Mailer error: ' . $mail->ErrorInfo;
        } 
        else {
          alert('Your message has not been sent.');
        }
    }
?>

我做错了什么?来自 php 的 if(!$mail->Send()) { 甚至不起作用,有没有办法重构它,所以我不需要 javascript?

<script> 
    $(document).ready(function() {
        $("#ContactForm").validate({
            submitHandler: function() {
                //submit the form
                $.post("<?php echo $_SERVER[PHP_SELF]; ?>", //post
                    $("#ContactForm").serialize(), 
                    function(data){
                      //if message is sent
                      if (data == 'Sent') {
                        $("#message").fadeIn(); //show confirmation message
                        $("#ContactForm")[0].reset(); //reset fields
                    }
                    //
                });
                return false; //don't let the page refresh on submit.
            }
        }); //validate the form
    });
    </script> 

【问题讨论】:

    标签: php jquery ajax smtp sendgrid


    【解决方案1】:

    您需要像这样将您的 alert 括起来 [查看它周围的 &lt;script&gt; 标签]

    第二件事是..您没有正确解释消息,if(!$mail-&gt;Send()) 它应该说是Your message has not been sent.,但您正在做另一种方式。 [别担心我已经为你修改了;)]

     if(!$mail->Send())
            {
              echo "<script>alert('Your message has not been sent.')</script>";
              echo 'Mailer error: ' . $mail->ErrorInfo;
            } 
     else
            {
         echo "<script>alert('Thanks, your message has been sent.')</script>";
            }
    

    【讨论】:

    • 同样的问题,邮件发送但没有警报。另请参阅 javascript,我想我需要根据 johnboy.com/scripts/simple-jquery-form-without-page-refresh/… - @ShankarDamodaran 使用它
    • 该页面用于显示成功消息并在重新加载后在白页上回显。由于我添加了验证,我无法再回显。 javascript应该显示/淡化#message div,但这也不会发生。
    • 我刚刚发现了一个类似的线程。 stackoverflow.com/questions/16143911/…
    • 为什么相似?这是发送数据的问题。我的表单发送良好,但由于我设置了验证,它只是没有显示谢谢你的消息
    • 尝试检查 smtp.site.com 上的邮件服务器日志,它(从您的代码的外观来看)是您传递这些消息的 SMTP 服务器。日志是否显示收到来自您的应用程序的消息?如果是这样,当它尝试将消息转发到收件人的 MX 时会发生什么?
    猜你喜欢
    • 2016-09-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多