0

我有一个AJAX表单,它说它成功但仍然没有收到任何电子邮件,非常烦人。

<script src="//ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>

<script type="text/javascript">

/*
    Code by David McKeown
    www.craftedbydavid.com
*/

jQuery(document).ready(function () { // wait until the document is ready
    jQuery('#send').click(function(){ // when the button is clicked the code executes
        jQuery('.error').fadeOut('slow'); // reset the error messages (hides them)

        var error = false; // we will set this true if the form isn't valid

        var name = jQuery('input#name').val(); // get the value of the input field
        if(name == "" || name == " ") {
            jQuery('#err-name').fadeIn('slow'); // show the error message
            error = true; // change the error state to true
        }

        var phone = jQuery('input#phone').val(); // get the value of the input field
        if(phone == "" || phone == " ") {
            jQuery('#err-phone').fadeIn('slow'); // show the error message
            error = true; // change the error state to true
        }

        var email_compare = /^([a-z0-9_.-]+)@([da-z.-]+).([a-z.]{2,6})$/; // Syntax to compare against input
        var email = jQuery('input#email').val(); // get the value of the input field
        if (email == "" || email == " ") { // check if the field is empty
            jQuery('#err-email').fadeIn('slow'); // error - empty
            error = true;

        }else if (!email_compare.test(email)) { // if it's not empty check the format against our email_compare variable
            jQuery('#err-emailvld').fadeIn('slow'); // error - not right format
            error = true;
        }

        if(error == true) {
            jQuery('#err-form').slideDown('slow');
            return false;
        }

        var data_string = jQuery('#ajax-form').serialize(); // Collect data from form
        //alert(data_string);

        jQuery.ajax({
            type: "POST",
            url: jQuery('#ajax-form').attr('action'),
            data: data_string,
            timeout: 6000,
            error: function(request,error) {
                if (error == "timeout") {
                    jQuery('#err-timedout').slideDown('slow');
                }
                else {
                    jQuery('#err-state').slideDown('slow');
                    jQuery("#err-state").html('An error occurred: ' + error + '');
                }
            },
            success: function() {
                jQuery('#ajax-form').slideUp('slow');
                jQuery('#ajaxsuccess').slideDown('slow');
            }
        });

        return false; // stops user browser being directed to the php file
    }); // end click function
});

</script>

HTML 表单 >>>>>>>>>>>>>>

<!-- language: lang-html -->

<form name="ajax-form" id="ajax-form" action="mail-it.php" method="post">
    <p>
      <label for="name">Name: * 
        <span class="error" id="err-name">please enter name</span>
        <br />
      </label>

      <input name="name" id="name" type="text" /><br /><br />

          <label for="phone">Contact Number: * 
        <span class="error" id="err-phone">please enter phone number</span>
        <br />
      </label>

      <input name="phone" id="phone" type="text" />

      <label for="email">
        <br />
        E-Mail: * 
        <span class="error" id="err-email">please enter e-mail</span>
        <span class="error" id="err-emailvld">e-mail is not a valid format</span><br />
      </label>
      <input name="email" id="email" type="text" />
      </p>

    <p>


      <label for="message">Message:</label>
      <textarea name="message" id="message"></textarea>

    <div class="myButton"><INPUT type="submit" name="" value="" id="send"></div>


<div class="mainerror">
<div class="error" id="err-form">There was a problem validating the form please check!</div>
    <div class="error" id="err-timedout">The connection to the server timed out!</div>
    <div class="error" id="err-state"></div></div>
</form>
<div id="ajaxsuccess"><h2>Successfully sent!!</h2></div>

邮件 PHP 发送邮件-IT.PHP

<!-- language: lang-php -->

<?php



/* Code by David McKeown - craftedbydavid.com */

/* Editable entries are bellow */



$send_to = "MYEMAIL@MYDOMAIN.co.uk";

$send_subject = "Website Enquiry ";







/*Be careful when editing below this line */



$f_name = cleanupentries($_POST["name"]);

$f_phone = cleanupentries($_POST["phone"]);

$f_email = cleanupentries($_POST["email"]);

$f_message = cleanupentries($_POST["message"]);

$from_ip = $_SERVER['REMOTE_ADDR'];

$from_browser = $_SERVER['HTTP_USER_AGENT'];



function cleanupentries($entry) {

    $entry = trim($entry);

    $entry = stripslashes($entry);

    $entry = htmlspecialchars($entry);



    return $entry;

}



$message = "This email was submitted on " . date('m-d-Y') . 

"\n\nName: " . $f_name .

"\n\nPhone: " . $f_phone . 

"\n\nE-Mail: " . $f_email . 

"\n\nMessage: \n" . $f_message . 

"\n\n\nTechnical Details:\n" . $from_ip . "\n" . $from_browser;



$send_subject .= " - {$f_name}";



$headers = "From: " . $f_email . "\r\n" .

    "Reply-To: " . $f_email . "\r\n" .

    "X-Mailer: PHP/" . phpversion();



if (!$f_email) {

    echo "no email";

    exit;

}else if (!$f_name){

    echo "no name";

    exit;

}else if (!$f_phone){

    echo "no phone";

    exit;

}else{

    if (filter_var($f_email, FILTER_VALIDATE_EMAIL)) {

        mail($send_to, $send_subject, $message, $headers);

        echo "true";

    }else{

        echo "invalid email";

        exit;

    }

}



?>

表格确实显示成功,但仍未收到电子邮件!有任何想法吗?

4

3 回答 3

0

由于您保留了要提交的按钮类型,因此它以默认方式执行。

因此,在提交事件上,只需取消表单提交并运行您的 AJAX 代码。

$('#ajax-form').bind('submit',function(e) {
   e.preventDefault(); //Will prevent the submit...
  //Add your code here
});
于 2013-01-15T11:04:31.143 回答
0

检查您的错误日志,这将为您提供有关实际情况的更多信息。

于 2013-01-15T11:05:34.340 回答
0

测试你的mail-it.php独立。注释掉jQuery('#send').click(function(){ ... }部分。然后在mail-it.php末尾添加以下行以打印最后一个错误。

print_r(error_get_last());    // php >= 5.2.0 

现在尝试提交表单。这应该在提交时重定向到mail-it.php脚本并打印错误数组(如果有)。如果它抛出一些信息,请尝试纠正。

于 2013-01-15T11:13:01.827 回答