Почему функция wp mail() не отправляет никаких электронных писем и не отображает "0" в ответе Chrome "Сеть"


Я пытаюсь отправлять электронные письма через WordPress с помощью функции wp_mail(), и, похоже, это не работает.

Он отображает 0 в ответе Chrome "Сеть" с

Status Code:200 OK

Это моя часть кода:

    // Contact form  Ajax 

    add_action('wp_ajax_nopriv_submit_contact_form', 'submit_contact_form'); 

    function submit_contact_form(){

        if(isset($_POST['email'])) {

            $email = $_POST['email'];       
            $email_to = "[email protected]";

            $host = "ssl://smtp.gmail.com:465";
            $username = '[email protected]';
            $password = 'passpass';

            $email_subject = "You have a new email from $email via company.com website";
            $message = $_POST['text']; 

            $headers = array ('From' => $email, 'To' => $email_to,'Subject' => $email_subject);
            /*$smtp = Mail::factory('smtp',
              array ('host' => $host,
                'auth' => true,
                'username' => $username,
                'password' => $password));*/

            //$mail = $smtp->send($email_to, $headers, $message);

            wp_mail( $email_to, $email_subject, $message );

            /*if (PEAR::isError($mail)) {
              echo($mail->getMessage());
            } else {
              echo("Message successfully sent!\n");
            }*/
        }
    }





    error_reporting(E_ALL);
    ini_set("display_errors", 1);

Какая часть может быть неправильной?

Изменить:

Это часть ajax:

// Send button for the "contact form".
$('#sendBtn').click(function(){
    //get info 
    var fullname = $("#fullname").val();
    var email = $("#email").val();
    var text = $("#text").val();

    //send info to php 
    $.ajax({
        beforeSend: function() {
            if ( IsEmail(email) == false) {
                $('#aboutUnsuccess').show("slow");
                $('.form_content').hide("slow");
            }
        },
        url: document.location.protocol+'//'+document.location.host+'/wp-admin/admin-ajax.php', 
        type: "POST", 
        /*action: 'submit_contact_form',*/
        data: ({ "action": "submit_contact_form", "fullname": fullname, "email": email, "text": text }), 
        success: function (results){
            if ( IsEmail(email) == true) {
                //hide table
                $('.form_content').hide('slow', function() {
                    $('.form_content').hide( "slow" );
                  });
                //show textboxes
                $('#aboutSuccess').show("slow");
                $( "#aboutSuccess" ).append( "<iframe id=\"pixel-thing\" src=\"http://54.xx.xx.xx/wp-content/themes/twentyfifteen-child/thePixel.html\" width=\"1\" height=\"1\"  border=\"0\"></iframe>" );

            }
        }
    }); 


});
Author: butlerblog, 2015-02-27

1 answers

Поскольку это функция AJAX, ваша функция должна exit; или die(); после последней строки выполняемого кода, в данном случае вне оператора if перед заключительным }

Однако я не думаю, что это настоящая проблема, если вы получаете 0, возвращенный по моему опыту, это означает, что функция не запущена, потому что admin-ajax.php возвращает 0, если он попадает в конец файла и не выполняет вашу функцию.

Можете ли вы опубликовать запрос AJAX?

Также для отладка (поскольку ваша функция на самом деле ничего не возвращает в данный момент), перед тем как exit; или die(); вы можете добавить ответ, чтобы проверить, действительно ли ваша функция выполняется, я обычно использую что-то вроде:

    header("Content-Type: application/json", true);
    echo json_encode( array("AJAX" => "Success") );
 3
Author: Jason Murray, 2015-02-27 12:30:22