PHPMailer 电子邮件发送,但表单中没有值

Posted

技术标签:

【中文标题】PHPMailer 电子邮件发送,但表单中没有值【英文标题】:PHPMailer email sending, but no values from the form 【发布时间】:2014-07-15 02:09:53 【问题描述】:

我不知道我为此损失了多少工作......但我的表单无法正常工作。

当我收到电子邮件时,它们完全是空白的。我的代码如下:

<span class="errmsg"></span>

<label for="contact-name">Name</label>
<input type="text" id="contact-name" name="contact-name" required>

<label for="contact-email">E-mail address</label>
<input type="email" id="contact-email" name="contact-email" required>

<label for="contact-subject">Subject</label>
<input type="text" id="contact-subject" name="contact-subject" required>

<label for="contact-message">Message</label>
<textarea id="contact-message" name="contact-message" required></textarea>

<div class="button" type="submit" id="contact-submit" name="contact-submit">Submit</div>

我选择使用 ajax post 将数据发送到 php,而不是使用经典的 &lt;form&gt;...&lt;/form&gt; 构造:

$("#contact-submit").click(function() 
    // validateForm() just checks that required fields have values
    if (validateForm()) 
        $.ajax(
            type: 'POST',
            url: '/contact.php',
            data:  name: $('#contact-name').val(),
                    from: $('#contact-email').val(),
                    subject: $('#contact-subject').val(),
                    message: $('#contact-message').val()
            , // end data
            success: function clearFields() 
                $('#contact-name').val('');
                $('#contact-email').val('');
                $('#contact-subject').val('');
                $('#contact-message').val('');
                $('.errmsg').text('Your email was sent successfully.');
                $('.errmsg').css('color', '#389320');
             // end success
        ); // end ajax
    
    else
    
        var errmsg = "Your email could not be sent.<br />";
        errmsg += "Please ensure that you've filled in all the fields.";
        $(".errmsg").html(errmsg);
        $(".errmsg").css("color", "#ff0000");
    
); // end click

这(应该)将表单数据发布到下面发送电子邮件的 PHP 文件中:

<?php
    error_reporting(E_ALL);
    require_once("class.phpmailer.php");
    include("class.smtp.php");

    $email = new PHPMailer();

    try
    
        //
        // Set server details for send
        //
        $email->IsSMTP();
        $email->Host = "mail.this.com";
        $email->Port = 25;
        $email->SMTPAuth = true;
        $email->Username = "info@this.com";
        $email->Password = "p455W0rd";

        //
        // Send mail from the contact form
        //
        $to = "info@this.com";
        $from = $_POST["contact-email"];
        $name = $_POST["contact-name"];
        $subject = "From web: ".$_POST["contact-subject"];
        $message = $_POST["contact-message"];

        $body = "<p>Hi Ortund,</p>";
        $body .= "<p>You have received a new query on your website.</p><p>Please see below:</p>";
        $body .= "<p>";
        $body .= str_replace("\r\n", "<br />", $message);
        $body .= "</p>";
        $body .= "</body></html>";

        $email->SetFrom($from, $name);
        $email->AddReplyTo($from, $name);
        $email->AddAddress($to, $to);
        $email->Subject = $subject;
        $email->Body = $body;
        $email->IsHTML(true);

        $email->Send();

        session_start();
        $_SESSION["mailresult"] = "success";
        http_redirect("http://www.this.com");
    
    catch (Exception $e)
    
        $_SESSION["mailresult"] = "failed";
        $_SESSION["mailerror"] = $e->getMessage();
    

?>

有几层检查可以将消息返回给用户以了解发生了什么,但没有任何工作,这对我来说也是一个主要问题......

现在我很乐意将电子邮件表单数据放入电子邮件中,但我不明白为什么它不存在...

如果有人可以在这里帮助我,我将不胜感激。

编辑

这是我现在收到的电子邮件示例:

来自网络: 根用户: 发送时间:2014 年 5 月 26 日星期一 12:24 PM 至:info@this.com

你好,Ortund,

您在自己的网站上收到了新的查询。

请看下面:

【问题讨论】:

【参考方案1】:

使用此名称发布数据

  data:  name: $('#contact-name').val(),
          from: $('#contact-email').val(),
          subject: $('#contact-subject').val(),
          message: $('#contact-message').val()
        ,

但在此处以不同的名称检索

    $from = $_POST["contact-email"];
    $name = $_POST["contact-name"];
    $subject = "From web: ".$_POST["contact-subject"];
    $message = $_POST["contact-message"];

所以这样使用

        $from = $_POST["from"];
        $name = $_POST["name"];
        $subject = "From web: ".$_POST["subject"];
        $message = $_POST["message"];

【讨论】:

aaaaahhhhhhhhhhh你可以告诉我不经常用这种东西,对吗?我主要是 .NET 哈哈。谢谢!

以上是关于PHPMailer 电子邮件发送,但表单中没有值的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 PHPMailer 从 PC 将文件附加到电子邮件

PHPMailer 电子邮件发送成功但未收到 (EC2)

发送消息但未使用PHPmailer获取电子邮件[重复]

使用phpmailer通过带有图像的html文件发送电子邮件

在 PHPMailer 中调用 AddAttachment 不会发送邮件

PHPMailer() ajax 请求