繁体   English   中英

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

[英]Sending Email via PHP Not Working

我在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配置阻止消息被发送出去吗?

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM