[RESOLU] Problème d'envoi de mail

Fil
Invité n'ayant pas de compte PHPfrance

08 juin 2015, 18:02

Bonjour à tous,

En remplissant le formulaire et en appuyant sur le bouton "Envoyer". il est censé envoyer un message quand tout est bien remplis "Votre message nous ai bien parvenu" et sinon le message "Une erreur est survenue et votre mail n'est pas parti".

Mon soucis c que dans tous les cas, il envoi le message "Votre message nous ai bien parvenu" champs du formulaire remplis complètement ou pas. si quelqu'un a une idée je suis preneur merci d'avance.

Partie dans mon html visible dans la page :

Code : Tout sélectionner

<FONT COLOR="#00FF00" ><?php if(isset($erreur)){echo "<p>$erreur</p>";} ?></a></FONT>
Partie php :

Code : Tout sélectionner

if(mail($destinataire,$sujet,$message,$entete)){ $erreur= "Votre message nous ai bien parvenu"; unset($nom); unset($email); unset($message); } else{ $erreur="Une erreur est survenue et votre mail n'est pas parti "; } } ?>

Merci d'avance
Modifié en dernier par Ryle le 08 juin 2015, 18:19, modifié 1 fois.
Raison : Sujet non explicite

Eléphant du PHP | 103 Messages

08 juin 2015, 18:14

Salut,
Un sujet similaire vient d'être ouvert : http://openclassrooms.com/forum/sujet/petit-soucis-php :p

Mammouth du PHP | 688 Messages

08 juin 2015, 18:42

if(mail($destinataire,$sujet,$message,$entete)){
unset($email);

c'est normal d'avoir $destinataire dans un cas et $email dans l'autre ?

Petit nouveau ! | 4 Messages

08 juin 2015, 19:03

Oui cela correspond à cette partie du code : aux champs nom email et message.

Code : Tout sélectionner

if(empty($nom)){ $valid=false; $erreurnom="Vous n'avez pas rempli votre nom"; } if(!preg_match("/^[a-z0-9\-_.]+@[a-z0-9\-_.]+\.[a-z]{2,3}$/i",$email)){ $valid=false; $erreuremail="Votre email n'est pas valide"; } if(empty($email)){ $valid=false; $erreuremail="Vous n'avez pas rempli votre email"; } if(empty($message)){ $valid = false; $erreurmessage="Vous n'avez pas rempli votre message";
Oui cela correspond à cette partie du code

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

09 juin 2015, 16:11

Bonjour,

Tu obtiens le message de succès car la fonction mail() transmet bien les données au serveur smtp (que les données soient complètent ou non). Pour avoir le message "Une erreur est survenue ..." il faudrait que la fonction mail() rencontre une erreur ce qui n'est semble-t-il pas le cas.

Il te manque vraisemblablement un test pour savoir si ta variable $valid est égale à false, auquel cas tu ne dois pas faire appel à la fonction mail. Mais sans le code c'est difficile à diagnostiquer...
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Petit nouveau ! | 4 Messages

09 juin 2015, 18:39

Voila le code complet.

Code : Tout sélectionner

<?php if(!empty($_POST)){ extract($_POST); $valid = true; if(empty($nom)){ $valid=false; $erreurnom="vous n'avez pas rempli votre nom"; } if(!preg_match("/^[a-z0-9\-_.]+@[a-z0-9\-_.]+\.[a-z]{2,3}$/i",$email)){ $valid=false; $erreuremail="Votre email n'est pas valide"; } if(empty($email)){ $valid=false; $erreuremail="vous n'avez pas rempli votre email"; } if(empty($message)){ $valid = false; $erreurnom="vous n'avez pas rempli votre message"; } if($valid){ $destinataire="[email protected]"; $sujet=$nom."Nom de la personne"; $message = "Nom : ".$_POST['nom']."\r\n"; $message .= "Adresse email : ".$_POST['email']."\r\n"; $message .= "Message : ".$_POST['message']."\r\n"; $entete = 'From: '.$_POST['email']."\r\n". 'Reply-To: '.$_POST['email']."\r\n". 'X-Mailer: PHP/'.phpversion(); } if(mail($destinataire,$sujet,$message,$entete)){ $erreur= "votre message nous ai bien parvenu"; unset($nom); unset($email); unset($message); } else{ $erreur="Une erreur est survenue et votre mail n'est pas parti "; } } ?>

Mammouth du PHP | 688 Messages

09 juin 2015, 20:23

donc que ce soit valide ou non, tu envoies l'email, dans un cas avec des valeurs non définies, dans l'autre, avec les bonnes valeurs.

Petit nouveau ! | 4 Messages

09 juin 2015, 21:37

Le mail me parvient uniquement lorsque tous les champs sont remplis. Par contre l'affichage "votre message nous ai bien parvenu" s'affiche a tous les coups.

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

10 juin 2015, 09:02

Ton if(mail(...)) devrait être inclus dans la structure du if($valid). En effet, il ne faut pas envoyer de mail si $valid est à false :)
Le else et le message d'erreur en revanche ne devraient pas être associés à l'envoi de mail, mais au $valid à false
if($valid){
      $destinataire="[email protected]";
      $sujet=$nom."Nom de la personne";
      $message = "Nom : ".$_POST['nom']."\r\n";
      $message .= "Adresse email : ".$_POST['email']."\r\n";
      $message .= "Message : ".$_POST['message']."\r\n";
      $entete = 'From: '.$_POST['email']."\r\n".
           'Reply-To: '.$_POST['email']."\r\n".
      'X-Mailer: PHP/'.phpversion();

      if(mail($destinataire,$sujet,$message,$entete)){
         $erreur= "votre message nous ai bien parvenu";
         unset($nom);
         unset($email);
         unset($message);
      }

}
else{
      $erreur="Une erreur est survenue et votre mail n'est pas parti ";
}
La fonction mail ne retourne d'erreur que si elle ne peut pas transmettre le mail au serveur SMTP, elle ne cherche pas à savoir si le mail a bien été envoyé et reçu ou non... ;)

Ps : "votre message nous EST bien parvenu" ;)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Petit nouveau ! | 4 Messages

10 juin 2015, 14:07

Merci encore une fois à vous.

Sujet résolu