web-dev-qa-db-fra.com

Pourquoi la fonction wp_mail () n'envoie pas d'e-mails et n'affiche pas la réponse "0" dans la réponse "Réseau" de Chrome

J'essaie d'envoyer des courriels via WordPress à l'aide de la fonction wp_mail() et cela ne semble pas fonctionner.

Il affiche 0 dans la réponse "Réseau" de Chrome avec

Status Code:200 OK

Ceci est ma partie de code:

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

Quelle partie peut être fausse?

Modifier:

Ceci est la partie 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

Comme il s'agit d'une fonction AJAX, votre fonction doit exit; ou die(); après la dernière ligne du code exécuté, en dehors de l'instruction if avant le } final.

Cependant, je ne pense pas que ce soit le vrai problème. Si vous obtenez un 0 renvoyé dans mon expérience, cela signifie que la fonction n'est pas en cours d'exécution car admin-ajax.php renvoie 0 si elle atteint la fin du fichier et ne le détecte pas. votre fonction.

Pouvez-vous envoyer la demande AJAX?

Également pour le débogage (parce que votre fonction ne retourne rien, pour le moment), avant d'ajouter le exit; ou le die();, vous souhaiterez peut-être ajouter une réponse pour vérifier que votre fonction est bien en cours d'exécution. J'utilise généralement quelque chose comme:

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