PHP表单处理程序与jQuery脚本重复电子邮件

I have a php function handling the results of a form delivered from a jQuery script, as the form content is also delivered to a Workbooks CRM url to be added to records there.

All works fine, except the email is sent 3 times. The button clicked is not inside the form, and the 'send' value for isset($_POST) is delivered from a hidden form field in the form.

I've tried:

  • Adding flags, both in PHP and in the jQuery.
  • Adding alerts in the jQuery.
  • Adding exit("sent"); after the mail() function.

The alert() experiment appeared to indicate the jQuery wasn't the issue, but flags seemed to indicate the same in the PHP!

Here's the jQuery:

$(document).ready(function () {
      $("#test-vf-button1").click(function (event) {
          event.preventDefault();
            // Field values as array
            var name = $("#name").val();
            var email = $("#email").val();
            var message = $("#message").val();
            var formData = $("#wb_form").serialize();
            var url = $(location).attr('hostname');
            var pathname = $(location).attr('pathname');
            var pageUrl = url + pathname;
            console.log(pageUrl);
            $("#validate-message").empty();
            $("#confirm-message").empty();
            if (name == '' || email == '' || message == '') {
                $("#validate-message").append(" Fill in required fields");
            } else {
                // Returns successful data submission message when the entered information is stored in database.
                $.ajax({
                    type: 'POST',
                    url: "http://visual-factory.co.uk/",
                    data: formData,
                    success: function () {
                        $.ajax({
                            type: 'POST',
                            url: "https://secure.workbooks.com/crm/web_leads",
                            crossDomain: true,
                            data: formData,
                            dataType: 'text',
                            success: function () {

PHP handling function:

function vf_deliver_mail() {
// if the submit button is clicked, send the email
if ( isset( $_POST['send'] ) ) {
    // sanitize form values
    $title   = sanitize_text_field( $_POST['person_lead_party']['person_personal_title'] );
    $name    = sanitize_text_field( $_POST['person_lead_party']['name'] );
    $jobrole   = sanitize_text_field( $_POST['person_lead_party']['person_job_role'] );
    $email   = sanitize_text_field( $_POST['org_lead_party']['main_location']['email']);
    $phone   = sanitize_text_field( $_POST['org_lead_party']['main_location']['telephone'] );
    $company   = sanitize_text_field( $_POST['org_lead_party']['name'] );
    $country   = sanitize_text_field( $_POST['org_lead_party']['main_location']['country'] );
    $messagecontent = esc_textarea( $_POST['vf-message'] );
    $message = "<p>Title: ".$title."</p>";
    $message .= "<p>Name of lead is: ".$name."</p>";
    $message .= "<p>Job Role: ".$jobrole."</p>";
    $message .= "<p>Email is: ".$email."</p>";
    $message .= "<p>Phone is: ".$phone."</p>";
    $message .= "<p>Company is: ".$company."</p>";
    $message .= "<p>Country is: ".$country."</p>";
    $message .= "<p>Message: ".$messagecontent.".</p>";

    // get the blog administrator's email address
    $to = get_option( 'admin_email' );
    $subject = "Form response";
    $headers = "From: $name <$email>" . "
";
    mail( $to, $subject, $message, $headers ) ;
  }
}