PHP / JQuery联系表单没有通过电子邮件发送

时间:2015-08-03 16:22:25

标签: javascript php jquery forms

我有一个简单的联系表格

<form role="form" id="contactForm" method="post" action="php/mailer.php">
    <div class="form-group">
        <input type="text" class="form-control form-effect" name="name" id="name" placeholder="Name" required>
    </div>
    <div class="form-group">
        <input type="email" class="form-control form-effect" name="email" id="email" placeholder="Email" required>
    </div>
    <div class="form-group">
        <textarea type="textarea" class="form-control form-effect" name="message" id="message" placeholder="Message"></textarea>
    </div>
    <button type="submit" class="btn btn-default btn-sub" id="sbtBtn">Submit</button>
</form>
<div id="form-messages"></div>

提交表单后,我的javascript文件会对其提交

var form = $('#contactForm');
var formMessages = $('#form-messages');

$(form).submit(function(event) {
    event.preventDefault();
    var formData = $(form).serialize();

    $.ajax({
        type: 'POST',
        url: $(form).attr('action'),
        data: formData,
        dataType: "json"
    }).done(function(response) {
        $(formMessages).text(response);
        $(form)[0].reset();
    }).fail(function(data) {
        if (data.responseText !== '') {
            $(formMessages).text(data.responseText);
        } else {
            $(formMessages).text('Oops! An error occured and your message could not be sent.');
        }
    });
});

然后调用我的php文件mailer.php

<?php
if ($_SERVER['REQUEST_METHOD'] === 'POST') {

    $to_email = "test@gmail.com";
    $name      = filter_var($_POST["name"], FILTER_SANITIZE_STRING);
    $email     = filter_var($_POST["email"], FILTER_SANITIZE_EMAIL);
    $message   = filter_var($_POST["message"], FILTER_SANITIZE_STRING);

    if(strlen($name)<2){ // If length is less than 2 it will output JSON error.
        json_encode('Name is too short or empty!');
    }
    if(!filter_var($email, FILTER_VALIDATE_EMAIL)){ //email validation
        json_encode('Please enter a valid email!');
    }

    $message_body = $message."\r\n\r\n-".$name."\r\nEmail : ".$email."\r\n (".$message.") " ;

    $headers = 'From: '.$name.'' . "\r\n" .
        'Reply-To: '.$email.'' . "\r\n" .
        'X-Mailer: PHP/' . phpversion();

    $send_mail = mail($to_email, "Contact from website", $message_body, $headers);

    if(!$send_mail) {
        json_encode('Could not send mail! Please try again.');
    }else{
        json_encode("Thank you for your message, we will contact you shortly");
    }
}

由于某种原因,我显示的输出为空,并且不发送任何电子邮件。我一直想弄清楚为什么但似乎找不到任何东西。我知道它进入PHP文件,但不确定它有什么问题。

我甚至不知道从哪里得到空输出?

2 个答案:

答案 0 :(得分:1)

首先,您需要在所有json_encodes之前放置echo,例如

echo json_encode('Name is too short or empty!');

然后至少你可以看到是否有任何验证消息在触发。

其次,您需要尝试使用mail()命令和硬编码参数的php文件来确认您的邮件设置正确。如果您正在使用localhost,则可能不是。

接下来,检查网络下的控制台(f12)并确认实际提交了您想要的数据。你应该看到你的一个json回应作为回应。

到目前为止,您应该更好地了解在哪里集中精力/问题

答案 1 :(得分:-1)

你忘了在每个json_encode()

之前添加echo