为什么PHP表单不发送电子邮件

时间:2015-10-19 06:01:26

标签: php jquery forms

我正在尝试使用jquery和PHP发送电子邮件,但即使PHP成功执行,我也不会收到电子邮件。

这是我的javascript代码:

<script type='text/javascript'>
    $("#formoid").submit(function(event) {
        event.preventDefault();
        var $form = $(this),
            url = $form.attr('action');
        var posting = $.post(url, {
            name: $('#name').val(),
            email: $('#email').val(),
            message: $('#message').val()
        });
        posting.done(function(data) {
            $("#result").empty().append('Thank you for contacting. Will get back to you as sson as possible.');
        });
    });
</script>

我的PHP看起来像这样:

<?php 
    if(isset($_POST['submit'])){
        $to = "email@gmail.com"; // this is your Email address
        $from = $_POST['email']; // this is the sender's Email address
        $name = $_POST['name'];
        $email = $_POST['email'];
        $subject = "Portfolio form submission";   

        $message = $name . " " . $email . " wrote the following:" . "\n\n" . $_POST['message'];    

        $headers = "From:" . $from;
        $headers2 = "From:" . $to;
        mail($to,$subject,$message,$headers);
    }
?>

当我提交表格并检查dom时,我看到结果很好。 在XHR详细信息中,它显示:

statusText: "OK"

我在这里做错了吗?

编辑: 按要求添加HTML:

<form class="no-bottom" id="formoid" action="contact.php" title="" method="post">
    <label for="name" class="sr-only">Name</label>
    <input type="text" class="underline" name="name" id="name" placeholder="Your name..." required>
    <label for="email" class="sr-only">Email</label>
    <input type="email" class="underline" name="email" id="email" placeholder="Your email..." required>
    <label for="message" class="sr-only">Message</label>
    <textarea class="underline" name="message" id="message" cols="30" rows="6" placeholder="Here goes the message..." required></textarea>
    <div class="margin-1"></div>
    <input type="submit" value="Send it">
</form>

3 个答案:

答案 0 :(得分:1)

isset($_POST['submit'])正在检查客户端发布的日期中是否存在密钥submit

但是,从客户端发送的数据不包括它。

var posting = $.post(url, {
    name: $('#name').val(),
    email: $('#email').val(),
    message: $('#message').val()
});

要使其正常工作,您可以将其添加到POST数据中,也可以检查服务器中的其他密钥。

var posting = $.post(url, {
    name: $('#name').val(),
    email: $('#email').val(),
    message: $('#message').val(),
    submit: 'anythingTruthyHere' // Added `submit` key
});

或者,您可以检查POST数据中是否存在email

if (isset($_POST['email'])) {
    // send mail code here

答案 1 :(得分:0)

你可以使用好的lib PHPMailer。使用PHPMailer,您可以轻松设置smtp服务器地址,端口和身份验证。如果要从本地计算机发送电子邮件,则必须在本地设置smtp服务器(如Postfix)。

答案 2 :(得分:0)

我会给你一个简短的想法,而不是像这样写代码,分开文件。将表单操作连接到一些sendemail.php并编写您在那里发送电子邮件的PHP代码,最后写下以下内容

header("Location: contact.php");

不需要javascript并且不会使代码变得复杂。这应该主要帮助。