通过PHP发送电子邮件不起作用

时间:2013-09-03 15:21:47

标签: php javascript email azure

我有一个在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配置阻止了消息的发送吗?

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分: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服务器上没有这样做,那么您的邮件将立即失败。

相关问题