web-dev-qa-db-ja.com

Wp_mail()関数が何もEメールを送信せず、Chromeの「ネットワーク」応答に「0」と表示するのはなぜですか

私はwp_mail()関数を使ってWordPress経由で電子メールを送信しようとしていますが、うまくいかないようです。

Chromeの「ネットワーク」レスポンスに0を表示しています

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>" );

            }
        }
    }); 


});
1
Kar19

これはAJAX関数なので、実行するコードの最後の行の後、最後のexit;の前のifステートメントの外側に、関数を}またはdie();にする必要があります。

しかし、これは本当の問題ではないと思います。私の経験で0が返されている場合は、admin-ajax.phpがファイルの末尾に到達してピックアップしない場合は0を返すため、関数は実行されません。あなたの機能.

AJAXリクエストを投稿できますか?

exit;またはdie();の前に、デバッグのために(あなたの関数は実際には何も返さないので)、あなたの関数が実際に実行されていることを確認するための応答を追加したいかもしれません。

    header("Content-Type: application/json", true);
    echo json_encode( array("AJAX" => "Success") );
3
Jason Murray