Partage
  • Partager sur Facebook
  • Partager sur Twitter

Envoi formulaire par mail ?

    2 juillet 2020 à 15:21:52

    Bonjour, 

    Je suis en cours de développement d'un site internet (et là je me dit que j'ai peut-être été un peu trop ambitieuse)

    Le Front-End est fait, je m'attaque donc par le truc qui me paraissait facile, la gestion de l'envoi du formulaire de la page contact.

    En vrai, j'aurai besoin que le formulaire soit envoyé à 2 boîtes mails. Je teste donc le truc avec plusieurs mails à moi.

    Le code : 

    <?php
    
    $emailTo = array('moi@laposte.net', 'moi@gmail.com', 'moi@ymail.com',
        'moi@yahoo.com');
    
    $contenuFormulaire = array(
        "prenomContact" => "",
        "nomContact" => "",
        "emailContact" => "",
        "telephoneContact" => "",
        "messageContact" => "",
        "prenomContactError" => "",
        "nomContactError" => "",
        "emailContactError" => "",
        "telephoneContactError" => "",
        "messageContactError" => "",
        "isSuccess" => false,
    );
    
    function verifyInput($var) {
        $var = trim($var);
        $var = stripslashes($var);
        $var = htmlspecialchars($var);
        
        return $var;
    }
    
    function isTelephone($var) {
        return preg_match("/^[0-9 ]*$/", $var);
    }
    
    function isEmail($var) {
        return filter_var($var, FILTER_VALIDATE_EMAIL);
    }
    
    if($_SERVER["REQUEST_METHOD"] == "POST") {
        $contenuFormulaire["prenomContact"] = verifyInput($_POST['prenomContact']);
        $contenuFormulaire["nomContact"] = verifyInput($_POST['nomContact']);
        $contenuFormulaire["emailContact"] = verifyInput($_POST['emailContact']);
        $contenuFormulaire["telephoneContact"] = verifyInput($_POST['telephoneContact']);
        $contenuFormulaire["messageContact"] = verifyInput($_POST['messageContact']);
        $contenuFormulaire["isSuccess"] = true;
        $emailTexte = "";
        
        if(empty($contenuFormulaire["prenomContact"])) {
            $contenuFormulaire["prenomContactError"] = "votre prénom est indispensable";
            $contenuFormulaire["isSuccess"] = false;
        } else {
            $emailTexte .= "Prenom = {$contenuFormulaire["prenomContact"]}\n";
        }
        
        if(empty($contenuFormulaire["nomContact"])) {
            $contenuFormulaire["nomContactError"] = "votre nom est indispensable";
            $contenuFormulaire["isSuccess"] = false;
        } else {
            $emailTexte .= "Nom = {$contenuFormulaire["nomContact"]}\n";
        }
        
        if(empty($contenuFormulaire["emailContact"])) {
            $contenuFormulaire["emailContactError"] = "votre email est indispensable";
            $contenuFormulaire["isSuccess"] = false;
        } else if(!isEmail($contenuFormulaire["emailContact"])) {
            $contenuFormulaire["emailContactError"] = "votre email est invalide";
            $contenuFormulaire["isSuccess"] = false;
        } else {
            $emailTexte .= "Email = {$contenuFormulaire["emailContact"]}\n";
        }
        
        if(!isTelephone($contenuFormulaire["telephoneContact"])) {
            $contenuFormulaire["telephoneContactError"] = "uniquement des chiffres et des "
                    . "espaces svp";
        } else {
            $emailTexte .= "Téléphone = {$contenuFormulaire["telephoneContact"]}\n";
        }
        
        if(empty($contenuFormulaire["messageContact"])) {
            $contenuFormulaire["messageContactError"] = "vous ne pouvez pas envoyer de "
                    . "message vide";
            $contenuFormulaire["isSuccess"] = false;
        } else {
            $emailTexte .= "Message = {$contenuFormulaire["messageContact"]}\n";
        }
        
        if($contenuFormulaire["isSuccess"]) {
            $enTete = "From : {$contenuFormulaire["prenomContact"]} "
            . "{$contenuFormulaire["nomContact"]} <{$contenuFormulaire["emailContact"]}>"
            . "\r\nReply To : {$contenuFormulaire["emailContact"]}";
            foreach($emailTo as $adresse) {
                mail($adresse, "Message de la page Contact du site internet",
                        $emailTexte, $enTete);  
            }
            header("Location: ../pages/contact.php");
                   
        } 
        

    Comme il y a plusieurs destinaires, je me suis contentée d'une boucle foreach.

    Enfin ça avait l'air très simple.

    Sauf que ça ne fonctionne pas. J'ai fait un test il y a presque 15 minutes, et j'ai beau actualiser les différentes boîtes mail, je l'ai reçu nul part ce mail du formulaire.

    Où ça cloche ?

    Un problème dans mon code ?

    Ou ... ?????

    D'avance merci :)

    • Partager sur Facebook
    • Partager sur Twitter
      2 juillet 2020 à 20:02:59

      Bonjour,

      Mets en commentaire ton header sinon tu ne verras pas les erreurs.

      La fonction mail renvoie un boolean, il serait bien de le récupérer afin de vérifier que la fonction ne retourne pas une erreur

      Gmail es très strict au niveau des messages.

      Que dises les logs de ton serveurs ? Si local est-ce que le smtp est renseigné ?

      Je t'invite a te diriger ver "phpmailer" qui bien plus complet et à peine plus difficile a mettre en place

      • Partager sur Facebook
      • Partager sur Twitter
        3 juillet 2020 à 9:00:11

        Ou là...à peine plus difficile à mettre en place...vu mon niveau, là tout de suite je vais éviter. :p

        Mais je serai obligée par la suite. Pour envoyer des mails à mes membres.

        Bref. A cette heure, je ne suis même pas capable d'envoyer un simple formulaire par mail, donc chaque chose en son temps.

        Sinon non je n'envoie pas en local, je ne peux pas (j'utilise Wamp), et c'est bien le problème.

        Je fais une modif, je téléverse les fichiers sur mon hébergement perso provisoire, et ... j'attends. J'attends que ce soit mis à jour (10 minutes) et ensuite je rafraichis les boîtes mails toutes les 30 secondes, en vain.

        Mais en effet j'ignorai que ça retournai un booléen mail().

        Donc ce matin je vais commencer par mettre une condition, pour voir.

        Mais c'est vraiment la misère de pas pouvoir tester en temps réel.

        • Partager sur Facebook
        • Partager sur Twitter
          3 juillet 2020 à 12:27:57

          Si tu utilises wamp alors tu es en local.

          Consulte la Faq php, lien en signature.

          La doc de phpmailer est simple et tu as beaucoup d'exemple

          J'ai vu pas mal de personne ne pas y arriver avec la fonction mail et se mettre à phpmailer

          • Partager sur Facebook
          • Partager sur Twitter
            4 juillet 2020 à 17:18:03

            Je crois que je ne vais pas avoir trop le choix.

            J'avoue, j'ai nettoyé mon PC la semaine dernière un peu trop ... 'profondément' je suppose, toujours est-il que Chrome est maintenant an anglais. Pourtant dans les paramètres avancés la langue est bien le français. Donc j'ai pas encore cherché comment le remettre en français.

            Bref, tout ça pour dire qu'en +, j'ai un peu de mal avec les recherches du coup, histoire d'enfoncer le clou :p

            Mon niveau en anglais est encore un peu juste.

            Pour preuve, j'ai même pas trouvé comment on faisait pour le télécharger phpMailer. Je tombe sur le GitHub ... mais après ? 

            Qu'est-ce que je prends ?

            Je vais essayer de corriger mon chrome, et je vais bosser le reste du site.

            Ensuite j'aurai le temps de chercher et je reviendrai peut-être poser des questions sinon.

            Merci en attendant :)

            • Partager sur Facebook
            • Partager sur Twitter

            Envoi formulaire par mail ?

            × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
            × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
            • Editeur
            • Markdown