Erreur lors de l envois du mail [Résolu]

Signaler
Messages postés
2902
Date d'inscription
lundi 14 mars 2011
Statut
Membre
Dernière intervention
10 juin 2021
-
Messages postés
2902
Date d'inscription
lundi 14 mars 2011
Statut
Membre
Dernière intervention
10 juin 2021
-
bonsoir a tous
j ai un formulaire de contact mais lors de l envois j ai une erreur
échec de l envois du mail

comme promis j ai activer les erreurs php et cela fait des miracles

il me retourne cette erreur
Notice: Undefined variable: Headers in line 33

Warning: mail(): headers parameter must be string or array

j ai donc un soucis dans le headers

je suis allé voir la documentation de php mais j avoue que j ai du mal a la comprendre

https://www.php.net/manual/fr/function.mail.php


voici le code

if(!empty($_POST["send"])) {
 $name = $_POST["name"];
 $email = $_POST["email"];
 $subject = $_POST["subject"];
 $message = $_POST["message"];

 $to = "per@hotmail.com";
 $headers = "From: $name \r\n";
 $headers .= "Reply-To: $email \r\n";
 if(mail($to, $subject, $message, $Headers)) {
     $mail_msg = "Vos informations de contact ont été reçues avec succés.";
  $type_mail_msg = "success";
 }else{
  $mail_msg = "Erreur lors de l'envoi de l'e-mail.";
  $type_mail_msg = "error";
 }
}

3 réponses

Messages postés
32942
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
12 juin 2021
3 557
Bonjour
Maintenant que tu sais comment voir les erreurs.... Il faut que tu apprennes à lire et à comprendre les messages anglais... Et surtout, à relire ton code afin de détecter où se situent les problèmes.

Le message te parle d'une variable qui n'existe pas.. et indique même la ligne de code à laquelle se situe le problème..

Si tu regardes bien comment tu l'as orthographié... Tu verras qu'en effet, cette variable n'existe pas...
Un H majuscule n'est pas pareil qu'un h minuscule.
Messages postés
2902
Date d'inscription
lundi 14 mars 2011
Statut
Membre
Dernière intervention
10 juin 2021
138
bonsoir jordane
merci pour la réponse
oui juste c était ce H qui m a tout fait foirer, je viens a l instant et jute avant ta réponse de le voir
voila cela est en ordre a présent

ce qui est bizarre c est que le message est parti dans ma boite spam alors que quand il n' y avait pas le Headers et je ne sais plus comment j'y avais arrive mais le message arrivait dans ma boite de réception? Une explication ?

dans la documentation ils parlent de $additional_params = []
je suppose que cela est pour ajouter des autres variables dans le corps du message ?
Messages postés
32942
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
12 juin 2021
3 557
Bonjour
Ben non... Ce n'est pas pour le corps du mail... Mais les entêtes... C'est marqué dans la doc.

additional_params (optionnel)
String ou array à insérer à la fin des en-têtes du mail.

Ce paramètre est typiquement utilisé pour ajouter des en-têtes supplémentaires (From, Cc et Bcc). Les en-têtes supplémentaires doivent être séparés par un caractère CRLF (\r\n). Si des données externes sont utilisées pour composer cet en-tête, elles doivent être d'abord nettoyées afin de ne pas injecter des données non désirées dans les en-têtes.
Messages postés
2902
Date d'inscription
lundi 14 mars 2011
Statut
Membre
Dernière intervention
10 juin 2021
138 >
Messages postés
32942
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
12 juin 2021

bonjour jordane
mais alors ou ce trouve le contenu du corps car je viens d essayer ce code que j ai trouve sur comment ca marche
et j ai le meme soucis
le corps de mon message se trouve dans l entête et dans le corps de mon message

<?php  
//Ecrivez votre adresse e-mail entre les guillemets  
$destinataire='monadresse@mondomaine';  
?><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Strict//EN" "[http://www.w3.org/TR/html4/strict.dtd]">  
<html lang="fr">  
<head>  
  <title>Contact</title>  
  <style type="text/css">  
    form#contact{border:2px solid red;width:70%;padding:1em}  
    p#msg,p#adr,p#obj{border:2px solid green;margin-right:10%;padding:10px}  
    p#msg textarea{border:2px solid blue;height:30em;width:80%}  
    p#adr input,p#obj input{border:2px solid blue}  
    p.bt{text-align:center}  
    p.bt input{border:1px red solid;width:50%}  
  </style>  
  <meta http-equiv="content-type" content="Content-type:text/html;charset=iso-8859-1">  
</head>  
<body style="direction: ltr;">  
<h1>Contact</h1>  
<?php  
$Previsualiser='<p class="bt">  
<input type="submit" name="previsualiser" tabindex="3" value="Prévisualiser"></p>';  
$Envoi="\n".'<p class="bt">  
<input name="envoi" tabindex="4" value="Envoyer" type="submit"></p>';  
if (isset($_POST['message']))  
  {  
    // La variable $verif va nous permettre d'analyser si la sémantique de l'email est bonne  
    $verif='#^[\w.-]+@[\w.-]+\.[a-zA-Z]{2,5}$#';  
    //quelques remplacements pour les specialchars  
    $message=preg_replace('#(<|>)#', '-', $_POST['message']);  
    $message=str_replace('"', "'",$message);  
    $message=str_replace('&', 'et',$message);  
    $objet=preg_replace('#(<|>)#', '-', $_POST['objet']);  
    $objet=str_replace('"', "'",$objet);  
    $objet=str_replace('&', 'et',$objet);  
    // On assigne et/ou protège nos variables  
    $votremail=stripslashes(htmlentities($_POST['votremail']));  
    $message=stripslashes(htmlspecialchars($message));  
    $objet=stripslashes(htmlspecialchars($objet));  
    //input envoi/previsualiser  
    $envoi=htmlentities($_POST['envoi']);  
    $previsualiser=htmlentities($_POST['previsualiser']);  
    //on enlève les espaces  
    $votremail=trim($votremail);  
    $message=trim($message);  
    $objet=trim($objet);  

    $apercu_resultat='<p>Aperçu du résultat :</p>';  

    /*On vérifie si l'e mail et le message sont pleins, et on agit en fonction.  
      (on affiche Apercu du resultat, tel ou tel champ est vide, etc...*/  
    //Si ca ne vas pas (mal rempli, mail non valide...)  
    if((empty($message))or(empty($objet))or(!preg_match($verif,$votremail)))  
      {  
        //les 3 champs sont vides  
        if(empty($votremail)and(empty($message))and(empty($objet)))  
          {  
            echo '<p>Tous les champs sont vides.</p>';  
            $message='';$votremail='';$objet='';$apercu_resultat='';  
          }  
        //un des champs est vide  
        else  
          {  
            if(!preg_match($verif,$votremail))  
              echo'<p>Votre adresse e-mail n\'est pas valide.</p>';  
            else  
            {  
              echo'<p>Il faut remplir tous les champs !</p>';  
              if(empty($message))  
                $apercu_resultat='';  
            }  
          }  
      }  
    //Si les deux sont pleins et que l'adresse est valide, on envoie on on prévisualise sans envoi  
    else  
      {  
        $domaine=preg_replace('#[^@]+@(.+)#','$1',$votremail);  
        $DomaineMailExiste=checkdnsrr($domaine,'MX');  
        if(!$DomaineMailExiste)  
          echo'<p>Le nom de domaine de l\'adresse e-mail que vous avez donné n\'existe pas.</p>';  
        elseif(!empty($previsualiser))  
            {  
              $apercu_resultat='<p>Votre message et votre adresse e-mail sont valides et prêts à être envoyés.  
              <br>Vous n\'avez plus qu\'à cliquer sur le bouton "Envoyer".<br>Prévisualisation :</p>';  
              $Previsualiser='';  
            }  
        elseif(!empty($envoi))  
            {  
              $objet='[SITE] : '.$objet;  
              $headers='From:'.$votremail."\r\n".'To:'.$mail."\r\n".'Subject:'.$objet."\r\n".'Content-type:text/plain;charset=iso-8859-1'."\r\n".'Sent:'.date('l, F d, Y H:i');  
              if(mail($destinataire,$objet,$message,$headers))  
              {  
                echo '<p>Votre message a bien été envoyé. Merci.</p><p><a href="/">Retour à la page d\'accueil</a></p>';  
                $Envoi='';  
                $Previsualiser='';  
              }  
              else  
                echo'<p>Un problème est survenu durant l\'envoi du mail.</p>';  
            }  
        else  
          echo'<p>Une condition innatendue est survenue lors de l\'exécution du script.</p>';  
      }  
echo $apercu_resultat;  
  }  
else  
  {  
  echo '<p>Vous pouvez utiliser ce formulaire pour me contacter.</p>';  
  $votremail='';$message='';  
  }  
$bas_formulaire=$Previsualiser.$Envoi;  
?>  
<form id='contact' method="post" action="<?php echo $_SERVER['PHP_SELF'];?>" enctype="multipart/form-data">  
  <p id='obj'><label for='objet'>Objet de votre message :<br>  
  <input type='text' name='objet' id='objet' tabindex='10' size='30'></label></p>   

  <p id="adr"><label for="mail">Votre Adresse E-mail<br>  
  <input name="votremail" tabindex="20" size="30" type="text" id="mail" value="<?php echo $votremail; ?>"></label></p>  
    
  <p id="msg"><label for="message">Votre message<br>  
  <textarea tabindex="30" rows="20" cols="120" name="message" id="message"><?php echo $message; ?></textarea>  
  </label></p>  
<?php echo $bas_formulaire;?>  
</form>  
</body>  
</html>
Messages postés
32942
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
12 juin 2021
3 557 >
Messages postés
2902
Date d'inscription
lundi 14 mars 2011
Statut
Membre
Dernière intervention
10 juin 2021


ou ce trouve le contenu du corps


Si tu regardes un peu le code que tu utilises pour l'envoi du mail.. c'est assez simple de voir où se trouve chaque élément...
 if(mail($destinataire,$objet,$message,$headers))  

En l'occurrence, le contenu du message se trouve.... dans la variable $message
Messages postés
2902
Date d'inscription
lundi 14 mars 2011
Statut
Membre
Dernière intervention
10 juin 2021
138 >
Messages postés
32942
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
12 juin 2021

bonjour jordane
tout est ok a présent
merci pour la réponse
Messages postés
2902
Date d'inscription
lundi 14 mars 2011
Statut
Membre
Dernière intervention
10 juin 2021
138
voila alors pour ceux que cela intéresse
voici comment envoyer envoyer plusieurs variables dans le body

//l'envoie du mail
if(!empty($_POST["send"])) {
 $name = $_POST["name"];
 $email = $_POST["email"];
 $subject = $_POST["subject"];
 $message = $_POST["message"];

$message .= "Mail:\t$email\n";
$message .= "Message:\t$subject\n\n";

 $to = "perrmail.com";
  $headers = 'From: '.$name."\r\n".
    'Reply-To: '.$email."\r\n" .
    'X-Mailer: PHP/' . phpversion();
 if(mail($to, $subject, $message,  $headers)) {
     $mail_msg = "Vos informations de contact ont été reçues avec succés.";
  $type_mail_msg = "success";
 }else{
  $mail_msg = "Erreur lors de l'envoi de l'e-mail.";
  $type_mail_msg = "error";
 }
}