Jquery和PHP联系表单发送电子邮件

时间:2014-01-20 01:18:30

标签: javascript php jquery html

当我点击水平菜单上的“Contact”时,此页面将加载到另一个html页面中。

我必须删除$(document).ready(function()才能让它一直运行。

除了我实际上没有收到电子邮件之外,一切似乎都在起作用。 有什么想法吗?

谢谢!

以下是 contact.html

<script type="text/javascript">
    $("#submit_btn").click(function() { 
        //collect input field values
        var user_name       = $('input[name=name]').val(); 
        var user_email      = $('input[name=email]').val();
        var user_message    = $('textarea[name=message]').val();

        //simple validation at client's end
        //we simply change border color to red if empty field using .css()
        var proceed = true;
        if(user_name==""){ 
            $('input[name=name]').css('border-color','red'); 
            proceed = false;
        }
        if(user_email==""){ 
            $('input[name=email]').css('border-color','red'); 
            proceed = false;
        }
        if(user_message=="") {  
            $('textarea[name=message]').css('border-color','red'); 
            proceed = false;
        }

        //everything looks good! proceed...
        if(proceed) 
        {
            //data to be sent to server
            post_data = {'userName':user_name, 'userEmail':user_email, 'userMessage':user_message};

            //Ajax post data to server
            $.post('contact_me.php', post_data, function(data){  

                //load success massage in #result div element, with slide effect.       
                $("#result").hide().html('<div class="success">'+data+'</div>').slideDown();

                //reset values in all input fields
                $('#contact_form input').val(''); 
                $('#contact_form textarea').val(''); 

            }).fail(function(err) {  //load any error data
                $("#result").hide().html('<div class="error">'+err.statusText+'</div>').slideDown();
            });
        }

    });

    //reset previously set border colors and hide all message on .keyup()
    $("#contact_form input, #contact_form textarea").keyup(function() { 
        $("#contact_form input, #contact_form textarea").css('border-color',''); 
        $("#result").slideUp();
    });
</script>

<fieldset id="contact_form">
<div id="result"></div>
    <label for="name"><span>Name</span>
    <input type="text" name="name" id="name" placeholder="Enter Your Name" />
    </label>

    <label for="email"><span>Email Address</span>
    <input type="text" name="email" id="email" placeholder="Enter Your Email" />
    </label>

    <label for="message"><span>Message</span>
    <textarea name="message" id="message" placeholder="Enter Your Name"></textarea>
    </label>

    <label><span>&nbsp;</span>
    <button class="submit_btn" id="submit_btn">Submit</button>
    </label>
</fieldset>

这是 contact_me.php

<?php
if($_POST)
{
    //check if its an ajax request, exit if not
    if(!isset($_SERVER['HTTP_X_REQUESTED_WITH']) AND strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) != 'xmlhttprequest') {
        die();
    } 

    $to_Email       = "@gmail.com"; //Replace with recipient email address
    $subject        = 'ContactUS'; //Subject line for emails

    //check $_POST vars are set, exit if any missing
    if(!isset($_POST["userName"]) || !isset($_POST["userEmail"]) || !isset($_POST["userMessage"]))
    {
        die();
    }

    //Sanitize input data using PHP filter_var().
    $user_Name        = filter_var($_POST["userName"], FILTER_SANITIZE_STRING);
    $user_Email       = filter_var($_POST["userEmail"], FILTER_SANITIZE_EMAIL);
    $user_Message     = filter_var($_POST["userMessage"], FILTER_SANITIZE_STRING);

    //additional php validation
    if(strlen($user_Name)<4) // If length is less than 4 it will throw an HTTP error.
    {
        header('HTTP/1.1 500 Name is too short or empty!');
        exit();
    }
    if(!filter_var($user_Email, FILTER_VALIDATE_EMAIL)) //email validation
    {
        header('HTTP/1.1 500 Please enter a valid email!');
        exit();
    }
    if(strlen($user_Message)<5) //check emtpy message
    {
        header('HTTP/1.1 500 Too short message! Please enter something.');
        exit();
    }

    //proceed with PHP email.
    $headers = "From: $user_Email\n" .
    "Reply-To: $user_Email\n" .
    "MIME-Version: 1.0\n" .
    "Content-Type: text/html\n" .
    "X-Mailer: PHP/" . phpversion();

    @$sentMail = mail($to_Email, $subject, $user_Message .'  -'.$user_Name, $headers);

    if(!$sentMail)
    {
        header('HTTP/1.1 500 Couldnot send mail! Sorry..');
        exit();
    }else{
        echo 'Hi '.$user_Name .', Thank you for your email! ';
        echo 'Your email has already arrived in my Inbox, all I need to do is Check it.';
    }
}
?>

解决方案: 我正在使用dreamhost并尝试从dreamhost服务器发送邮件,但使用“来自:@gmail”帐户。我不得不创建一个dreamhost @mydomain电子邮件并从那里发送。我检查了电子邮件日志并看到了这个错误:550 5.7.1不允许发件人域名。 可在此处阅读:http://wiki.dreamhost.com/PHP_mail()

2 个答案:

答案 0 :(得分:2)

这里可能存在许多问题。

首先,die()是正确错误处理的不良替代品 - 至少会返回HTTP 500错误,就像您在代码中处理其他一些错误情况一样。

其次,正如RUJordan规定的那样,@会抑制错误信息。您也可能没有邮件服务器;您应该(仅在开发环境中)使用error_reporting(E_ALL)函数。

第三,您的电子邮件标题应按\r\n分隔,而不是\n,如PHP Documentation中所述。您的上一个标题也应该包含\r\n

第四,从用户的电子邮件地址发送电子邮件(让我们使用“abc@example.com”)通过您的服务器(让我们使用“yourdomain.com”)是一种常见的垃圾邮件策略,通常会导致电子邮件被标记为垃圾邮件和/或自动删除(Gmail已对我这样做了)。尝试从“noreply@yourdomain.com”发送 - 您的服务器现在从自己的域发送电子邮件,因此更值得信赖。无论如何,您应该检查垃圾邮件文件夹 - 但是此步骤会减少Gmail在邮件到达您的收件箱或垃圾邮件文件夹之前将其删除的可能性。

最后,邮件服务器有时会遇到负载。电子邮件可能不会立即发送;尝试等待几个小时(tumblr曾经有过这么长的延迟)。此外,如果这是托管主机平台,请与主机核实一切都是应该的。

答案 1 :(得分:-1)

不接收PHP中的电子邮件可能有很多原因。如果您的php.ini具有正确的smtp.host设置,请检查您的邮件服务器是否正常工作。如果您使用外部电子邮件地址接收(例如谷歌电子邮件),您的邮件服务器应该能够向其发送消息。 Gmail需要身份验证和SMTPS才能发送,这需要额外设置邮件服务器。另外,检查您的垃圾邮件文件夹!