L'email ne s'envoie pas après validation du formulaire

Petit nouveau ! | 5 Messages

05 oct. 2022, 15:12

Bonjour à tous,

J'ai finalisé mon formulaire, cependant aucun mail n'arrive, je ne comprends pas.

J'ai réussi à le recevoir une fois en passant par Firefox mais depuis je n'y arrive pas alors que rien n'a été modifié.

Je ne sais pas si cela vient du php ou javascript, j'opte plus pour la deuxième option.

Merci de votre aide !

$(function () {
    
    $('#contact-form').submit(function(e) {
        e.preventDefault();
        $('.comments').empty();
        var postdata = $('#contact-form').serialize();
        
        $.ajax({
            type: 'POST',
            url: 'contact.php',
            data: postdata,
            dataType: 'json',
            success: function(json) {
                 
                if(json.isSuccess) 
                {
                    $('#contact-form').append("<p class='thank-you'>Votre message a bien été envoyé.</p>");
                    $('#contact-form')[0].reset();
                }
                else
                {
                    $('#firstname + .comments').html(json.firstnameError);
                    $('#name + .comments').html(json.nameError);
                    $('#email + .comments').html(json.emailError);
                    $('#phone + .comments').html(json.phoneError);
                    $('#message + .comments').html(json.messageError);
                }                
            }
        });
    });

})


<?php

    $array = array("firstname" => "", "name" => "", "email" => "", "phone" => "", "message" => "", "firstnameError" => "", "nameError" => "", "emailError" => "", "phoneError" => "", "messageError" => "", "isSuccess" => false);
    $emailTo = "monadressemail";

    if ($_SERVER["REQUEST_METHOD"] == "POST") { 
        $array["firstname"] = test_input($_POST["firstname"]);
        $array["name"] = test_input($_POST["name"]);
        $array["email"] = test_input($_POST["email"]);
        $array["phone"] = test_input($_POST["phone"]);
        $array["message"] = test_input($_POST["message"]);
        $array["isSuccess"] = true; 
        $emailText = "";
        
        if (empty($array["firstname"])) {
            $array["firstnameError"] = "Veuillez renseigner votre prénom.";
            $array["isSuccess"] = false; 
        } else {
            $emailText .= "Firstname: {$array['firstname']}\n";
        }

        if (empty($array["name"])) {
            $array["nameError"] = "Veuillez renseigner votre nom";
            $array["isSuccess"] = false; 
        } else {
            $emailText .= "Name: {$array['name']}\n";
        }

        if(!isEmail($array["email"])) {
            $array["emailError"] = "Veuillez respecter le format email ().";
            $array["isSuccess"] = false; 
        } else {
            $emailText .= "Email: {$array['email']}\n";
        }

        if (!isPhone($array["phone"])) {
            $array["phoneError"] = "Veuillez indiquer un numéro de téléphone valide.";
            $array["isSuccess"] = false; 
        } else {
            $emailText .= "Phone: {$array['phone']}\n";
        }

        if (empty($array["message"])) {
            $array["messageError"] = "Veuillez insérer votre message.";
            $array["isSuccess"] = false; 
        } else {
            $emailText .= "Message: {$array['message']}\n";
        }
        
        if($array["isSuccess"]) {
            $headers = "From: {$array['firstname']} {$array['name']} <{$array['email']}>\r\nReply-To: {$array['email']}";
            mail($emailTo, "Un message de votre site Grapr", $emailText, $headers);
        }
        
        echo json_encode($array);    
    }

    function isEmail($email) {
        return filter_var($email, FILTER_VALIDATE_EMAIL);
    }
    function isPhone($phone) {
        return preg_match("/^[0-9 ]*$/",$phone);
    }
    function test_input($data) {
      $data = trim($data);
      $data = stripslashes($data);
      $data = htmlspecialchars($data);
      return $data;
    }
 
?>

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9782 Messages

05 oct. 2022, 15:17

Regarde dans la console de dev de ton navigateur (Ctrl+Maj+i, onglet réseau) et clique sur l'appel Ajax que tu effectue vers contact.php pour vérifier si 1) l'appel est bien envoyé et 2) si ta page PHP affiche un message d'erreur ou bien le retour attendu.
Quand tout le reste a échoué, lisez le mode d'emploi...

Petit nouveau ! | 5 Messages

05 oct. 2022, 15:35

Aucun message d'erreur et lorsque je valide mon formulaire, le script s'exécute bien car j'ai réussi une fois à recevoir le mail via Firefox et il m'affiche le message de validation d'envoie du message

Mammouth du PHP | 2703 Messages

05 oct. 2022, 21:00

pour savoir d'où cela vient, je commencerais par ne mettre que ces 2 lignes dans un fichier :
$headers = "From: {$array['firstname']} {$array['name']} <{$array['email']}>\r\nReply-To: {$array['email']}";
mail($emailTo, "Un message de votre site Grapr", $emailText, $headers);
en faisant varier les données pour voir si cela arrive toujours avec certaines adresses email, si rien n'arrive avec d'autres.

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9782 Messages

06 oct. 2022, 10:30

Et regarde dans les logs d'erreur PHP de ton serveur voir si tu n'as pas qqch.
Pour savoir où sont situées les logs, fais un phpinfo() ou contacte ton hébergeur si tu es sur un mutualisé.
Quand tout le reste a échoué, lisez le mode d'emploi...

Petit nouveau ! | 5 Messages

06 oct. 2022, 14:51

Bonjour,
Merci de vos réponses.

@or1 -> j'ai laissé les 2 lignes dans le fichier, voici ce que j'ai laissé sur le fichier puis cela me dit quer mon message a bien été envoyé et je ne reçois rien. Je n'ai également pas d'erreur dans la console.
J'ai changé l'adresse mail de destination au cas où mais rien n'y fait !


<?php

    //$array = array("firstname" => "", "name" => "", "email" => "", "phone" => "", "message" => "", "firstnameError" => "", "nameError" => "", "emailError" => "", "phoneError" => "", "messageError" => "", "isSuccess" => false);
    $emailTo = "mon email";

    //if ($_SERVER["REQUEST_METHOD"] == "POST") { 
        //$array["firstname"] = test_input($_POST["firstname"]);
        //$array["name"] = test_input($_POST["name"]);
        //$array["email"] = test_input($_POST["email"]);
        //$array["phone"] = test_input($_POST["phone"]);
        //$array["message"] = test_input($_POST["message"]);
        $array["isSuccess"] = true; 
        //$emailText = "";
        
        
        if($array["isSuccess"]) {
            $headers = "From: {$array['firstname']} {$array['name']} <{$array['email']}>\r\nReply-To: {$array['email']}";
            mail($emailTo, "Un message de votre site", $emailText, $headers);
        }
        
        echo json_encode($array);    
    //}


 
?>



@@rthur -> j'ai bien accès au fichier phpinfo du serveur mais que regarder dans le fichier si il y a des erreurs ou autres ?


Merci d'avance