IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Formulaire de contact qui n'envoie pas d'email


Sujet :

Langage PHP

  1. #1
    Nouveau Candidat au Club Avatar de Jaguar91
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juillet 2015
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Eure et Loir (Centre)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juillet 2015
    Messages : 5
    Points : 1
    Points
    1
    Par défaut Formulaire de contact qui n'envoie pas d'email
    Bonjour à tous,
    Je sollicite un peu d'aide car cela fait plusieurs semaines que je travaille sur mon formulaire. J'ai pris un code de base que j'ai compris et que j'ai corrigé. Il n'y a plus d'erreur mais lorsque je le teste il me signale que le message est bien envoyé mais je ne reçois rien en boite de réception. J'ai donc continuer à me renseigner et trouver des réponses. Cela m'a permis de de modifier php.ini pour paramétrer le serveur smtp de mon fai. Mais toujours aucun email reçu. J'ai encore fais des recherches mais j'avoue qu'à force de voir toute sorte d'informations et autres codes, je suis un peu noyé. Voici le code que j'ai :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
     
    <?php
    $erreur= NULL;
    $info=NULL;
    if (!empty($_POST['nom']) AND !empty($_POST['tel']) AND !empty($_POST['email']) AND !empty($_POST['message'])) {
     
    	extract ($_POST);
        if (preg_match ("#^[a-z0-9._-]+@[a-z0-9._-]{2,}\.[a-z]{2,4}$#", $email)){
            $nom=htmlspecialchars(addslashes($nom));
            $tel=htmlspecialchars(addslashes($tel));
            $email=htmlspecialchars(addslashes($email));
            $message=htmlspecialchars(addslashes($message));
            $destinataire="mon_email@fai.fr";
            $sujet="formulaire de contact";
            $entete='De : '.$email.'';
            $message='Nom : '.$nom.' '."/n".'Téléphone : '.$tel.' '."/n".'Message : '.$message.'';
            $headers  = 'MIME-Version: 1.0' . "\r\n";
    		$headers .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n";
     
            mail ($destinataire, $sujet, $message, $entete, $headers);
     
            $info="Votre message a bien été envoyé";
            unset($_POST, $message, $nom, $email, $tel);
        }
        else {
            $erreur="Adresse email invalide";
        }
    }
    else {
        $erreur= "* Veuillez remplir tous les champs obligatoires";
    }
    ?>
    Il ne me manque pas grand chose mais je n'ai pas mis le doigt dessus. Peut-être quelqu'un pourrait éclairer ma lanterne.
    Cordialement,
    Jaguar91

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Il ne me manque pas grand chose
    Ca c'est toi qui le dit

    Est-ce que tu arrives à envoyer un email depuis PHP en dehors de ton formulaire ?
    Ca serait la première chose à tester.

    Généralement les envois depuis la fonction mail() sont filtrés par les serveurs SMTP qui les considérent comme du SPAM car ils sont trop pauvrement construits.
    On recommande plutôt d'utiliser la classe PHPMailer.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Invité
    Invité(e)
    Par défaut
    Bonjour et bienvenu sur DVP,

    le script que tu utilises est dépassé...

    1- voici un tuto qui correspond à ton script (envoi avec la fonction mail()), mais que je NE te recommande PAS (car ancien, plein de code obsolète..., mais bon, le principe est là) :



    2- Comme Sabotage, je te recommande d'utiliser :

    • phpMailer (regarde les scripts dans le dossier "examples" : notamment contactform.phps)

  4. #4
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Points : 16 372
    Points
    16 372
    Par défaut
    Je suppose que tu as vérifié dans ton dossier spams ?

    En plus de la recommandation pour PhpMailer, quelques explications sur ton code actuel et ce qui ne va pas avec :
    • AND : utilise plutôt &&. La différence est une question de priorité des opérateurs. Dans 99.99% des cas, tu ne verras pas la différence, mais utiliser && systématiquement peut éviter des prises de têtes pour le 0.01% restant.
    • extract ($_POST) : Arrrrglllll.... Tu vas transformer tous les champs de ton formulaire en variable. Et ça, c'est la porte ouverte à toutes les fenêtres : si un utilisateur malicieux ajoute un champ qui porte le même nom qu'une variable que tu définis avant l'appel à extract, ça va l'écraser, et utiliser la valeur du champ dans la suite du script. Imagine un peu si la variable en question est la connexion à la base de données, ou un indicateur de permissions
    • htmlspecialchars(addslashes($nom)) : Gérer une éventuelle injection XSS avec htmlspecialchars c'est bien. Par contre, utiliser addslashes en plus, ça ne sert pas à grand chose.
    • la validation du mail : ta regex est très restrictive. Bon, elle couvre probablement la majeure partie des emails existants, mais en théorie, quelque chose comme user+mailbox/department=shipping@example.com est une adresse valide. Tu peux regarder du côté filter_​input avec le flag FILTER_VALIDATE_EMAIL.
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

  5. #5
    Nouveau Candidat au Club Avatar de Jaguar91
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juillet 2015
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Eure et Loir (Centre)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juillet 2015
    Messages : 5
    Points : 1
    Points
    1
    Par défaut
    Tout d'abord merci à tous de votre aide. Je me suis donc mis à jour pour un formulaire avec phpmailer. J'ai l'ai installé et j'ai trouvé la donc avec un exemple d'envoi d'un email. J'ai testé l'email arrive comme convenu. J'ai modifié pour donner le formulaire suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
     
    <?php
    $erreur= NULL;
    $info=NULL;
    $nom=$_POST['nom'];
    $tel=$_POST['tel'];
    $email=$_POST['email'];
    $message=$_POST['message'];
     
    $nom=htmlentities($nom);
    $tel=htmlentities($tel);
    $email=htmlentities($email);
    $message=htmlentities($message);
     
    require('phpmailer/class.phpmailer.php');
    $mail = new PHPMailer();
    $mail->Host = "smtp.free.fr";
    $mail->CharSet= "utf-8";
    $mail->Port = 25;
    // Expéditeur
    $mail->SetFrom($email);
    // Destinataire
    $mail->AddAddress("monadresse@fai.fr");
    // Objet
    $mail->Subject = "Formulaire de contact";
     
    // Votre message
    $mail->MsgHTML($message, $tel);
     
    // Envoi du mail avec gestion des erreurs
    if(!$mail->Send()) {
      $erreur="Erreur ! Votre message n'a pas été envoyé" . $mail->ErrorInfo;
    } else {
      $info="Votre message a bien été envoyé";
    }
    $mail->SmtpClose();
    unset($mail);
    ?>
    Il fonctionne puisque je reçois mes tests. Mais sur la page index il signale un message "Notice: Undefined index: nom in C:\Program Files (x86)\EasyPHP\eds-www\siteVM\index.php on line 4".

  6. #6
    Expert éminent Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Justicier interdimensionnel

    Informations forums :
    Inscription : Mars 2009
    Messages : 2 858
    Points : 6 556
    Points
    6 556
    Par défaut
    Dans ce cas vérifie ton formulaire html pour voir s'il y a bien un <input type="text" name="nom"/> (et qu'il est bien entre les balises <form></form>).

    Méfie toi des utilisateurs malicieux, surtout ceux avec un chapeau pointu et une langue de belle-mère.
    Brachygobius xanthozonus
    Ctenobrycon Gymnocorymbus

  7. #7
    Nouveau Candidat au Club Avatar de Jaguar91
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juillet 2015
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Eure et Loir (Centre)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juillet 2015
    Messages : 5
    Points : 1
    Points
    1
    Par défaut
    Bonjour à tous,
    J'ai pris le temps de relire le code de mon formulaire et tout est bien conforme. Cela dit, j'ai procédé à mes recherches et j'ai trouvé le pourquoi. Ce message apparaît lorsqu'on affiche les valeurs avant de les assigner. Il y a donc deux solutions : soit on déplace le code après le formulaire soit on le conserve avant le démarrage du HTML (comme dans mon cas).
    Si on déplace le code php alors il n'y a rien à changer. Si on désire conserver le code avant le html alors il faut ajouter une condition qui s'écrit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    if(isset($_POST['nom'])){
    	$nom=$_POST['nom'];
    }
    if(isset($_POST['tel'])){
    	$tel=$_POST['tel'];
    }
    if(isset($_POST['email'])){
    	$email=$_POST['email'];
    }
    if(isset($_POST['message'])){
    	$message=$_POST['message'];
    }
    Et cela fonctionne très bien puisque les messages d'erreur liés aux variables disparaissent.
    Encore merci à la communauté pour l'aide apportée et votre gentillesse.
    Cordialement,
    Jaguar91

  8. #8
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    1- en effet, il vaut mieux le faire AVANT le formulaire, puisque ça permet (entre autres) de les ré-afficher facilement dans le formulaire en cas d'erreur* (champs obligatoires, email invalide,...)

    * à ce propos, on ne voit AUCUNE "gestion d'erreur" dans ton code !
    On peut taper n'importe quoi, ça envoie quand même....

    2- PAR CONTRE, pour initialiser correctement, on écrira plutôt :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $nom 	= (isset($_POST['nom']))? 	$_POST['nom'] 		: '';
    $tel 	= (isset($_POST['tel']))? 	$_POST['tel'] 		: '';
    $email 	= (isset($_POST['email']))? 	$_POST['email'] 	: '';
    ....

  9. #9
    Nouveau Candidat au Club Avatar de Jaguar91
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juillet 2015
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Eure et Loir (Centre)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juillet 2015
    Messages : 5
    Points : 1
    Points
    1
    Par défaut
    Merci je vais faire la correction.
    En effet je n'ai pas encore intégrer la gestion d'erreur car je ne la connais pas encore pour phpmailer. En cherchant je trouverai bien
    Bonne journée
    Cordialement,
    Jaguar91

  10. #10
    Invité
    Invité(e)
    Par défaut
    Non.

    Je parle de la "Gestion d'erreur" AVANT de faire appel à phpMailer.
    Ca ne dépend pas de phpMailer, mais de toi.

    C'est la VERIFICATION des données reçus par le formulaire :
    • vérifier les champs obligatoires (requis) : nom, email,...
    • vérifier la validité : email (FILTER_VALIDATE_EMAIL)

    Bref : le minimum à faire avant d'envoyer (ou enregistrer, ou...) quoi que ce soit.

  11. #11
    Nouveau Candidat au Club Avatar de Jaguar91
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juillet 2015
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Eure et Loir (Centre)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juillet 2015
    Messages : 5
    Points : 1
    Points
    1
    Par défaut
    Je travaille dessus vu que je ne maîtrise pas encore. Encore merci.
    Cordialement,
    Jaguar91

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. formulaire qui n'envoie pas se qu'il doit
    Par arckaniann dans le forum Langage
    Réponses: 1
    Dernier message: 15/12/2011, 01h16
  2. [PHP 5.0] Formulaire de contact qui marche pas
    Par Adweuz dans le forum Langage
    Réponses: 12
    Dernier message: 21/05/2011, 13h48
  3. Formulaire bouton "Envoyer" qui n'envoie pas
    Par Drone dans le forum Général JavaScript
    Réponses: 21
    Dernier message: 13/01/2010, 11h03
  4. Formulaire de connexion qui ne connecte pas
    Par Lexion71 dans le forum Langage
    Réponses: 3
    Dernier message: 28/12/2007, 18h41
  5. formulaire qui n'envoie pas a la bonne page
    Par hansaplast dans le forum Balisage (X)HTML et validation W3C
    Réponses: 4
    Dernier message: 19/06/2006, 14h13

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo