0

我有一个在 Windows Azure 上运行的站点,其中包含一个简单的联系表格,供人们联系。不幸的是,该表格现在不起作用...

我有一个 index.php 文件,其中包含以下形式:

<div class="form">name="name" placeholder="Name" id="contactname" />
    <input type="text" name="email" placeholder="Email" id="contactemail" />
    <textarea name="message" placeholder="Message" id="contactmessage"></textarea>
    <button>Contact</button>
</div>

然后我有一个这样的JS文件:

if ($('#contact').is(":visible")) {
$("#contact button").click(function() {

    var name     = $("#contactname").val();
    var message  = $("#contactmessage").val();
    var email    = $("#contactemail").val();
    var emailReg = /^[a-zA-Z0-9._+-]+@[a-zA-Z0-9-]+\.[a-zA-Z]{2,4}(\.[a-zA-Z]{2,3})?(\.[a-zA-Z]{2,3})?$/;

    // client-side validation
    if(emailReg.test(email) == false) {
        var emailValidation = false;
        $('#contactemail').addClass("error");
    }
    else
        $('#contactemail').removeClass("error");

    if(name.length < 1) {
        var nameValidation = false;
        $('#contactname').addClass("error");
    }
    else
        $('#contactname').removeClass("error");

    if(message.length < 1) {
        var messageValidation = false;
        $('#contactmessage').addClass("error");
    }
    else
        $('#contactmessage').removeClass("error");

    if ((nameValidation == false) || (emailValidation == false) || (messageValidation == false))
        return false;

    $.ajax({
        type: "post",
        dataType: "json",
        url: "send-email.php",
        data: $("#contact").serialize(),
        success: function(data) {

            $('.form').html('<p class="success">Thanks for getting in touch - we\'ll get back to you shortly.</p>');

        }
    });
    return false;
});

};

最后,一个用于发送电子邮件的 php 文件,名为 send-email.php:

$destination = 'info@clouddock.co'; // change this to your email.

// ##################################################
// DON'T EDIT BELOW UNLESS YOU KNOW WHAT YOU'RE DOING
// ##################################################

$email   = $_POST['email'];
$name    = $_POST['name'];
$message = $_POST['message'];
$subject = $name;
$headers = "From: ".$name." <".$email.">\r\n" .
         "Reply-To: ".$name." <".$email.">\r\n" .
         "X-Mailer: PHP/" . phpversion() . "\r\n" .
         "MIME-Version: 1.0\r\n" .
         "Content-Type: text/plain; charset=\"iso-8859-1\r\n" .
         "Content-Transfer-Encoding: 8bit\r\n\r\n";

mail($destination, $subject, $message, $headers);

}

当我填写联系表单时,JS 验证似乎正在工作,当我单击发送时,会出现“感谢您联系...”文本,就好像消息已发送一样。但我没有收到任何电子邮件。谁能建议问题可能出在哪里?会不会是 Azures 配置阻止了消息发送出去?

4

2 回答 2

1

$("#contact").serialize()用于获取要发送的数据,但没有 ID 元素contact。您应该使用$("#contactname, #contactemail, #contactmessage").serialize()(并修复第一个输入;))。

并且始终在 PHP 中验证输入数据,而不仅仅是在 JS 中!

于 2013-09-03T15:26:35.877 回答
1

当然它会显示感谢信息,它所需要的只是来自服务器的响应。您需要测试邮件是否实际发送,然后将其返回到您的原始脚本以确定要显示的消息。

if(mail($destination, $subject, $message, $headers)) {
    return '<p class="success">Thanks for getting in touch - we\'ll get back to you shortly.</p>';
} else {
    return '<p class="fail">The e-mail failed to send.</p>';
}

然后将您的 AJAX 设置为:

$.ajax({
    type: "post",
    url: "send-email.php",
    data: $("#contact").serialize(),
    success: function(data) {
        $('.form').html(data);

    }
});

您可能会发现您收到了失败消息,这很可能是您的服务器设置,或者可能是您没有将正确的内容传递给 mail() 函数。然后,您需要调试您的脚本以确定是否传递了正确的信息等。

对于 Windows 服务器,需要将它们配置为将所有邮件从 mail() 函数传递到 SMTP 服务器,因此如果您的 Azure 服务器上没有这样做,那么您的邮件将立即失败。

于 2013-09-03T15:29:27.333 回答