Page 1 sur 1

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

Posté : 05 oct. 2022, 15:12
par mclnt
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;
    }
 
?>

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

Posté : 05 oct. 2022, 15:17
par @rthur
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.

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

Posté : 05 oct. 2022, 15:35
par mclnt
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

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

Posté : 05 oct. 2022, 21:00
par or 1
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.

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

Posté : 06 oct. 2022, 10:30
par @rthur
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é.

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

Posté : 06 oct. 2022, 14:51
par mclnt
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