Erreur lors de l envois du mail
Résolu
flexi2202
Messages postés
3640
Date d'inscription
Statut
Membre
Dernière intervention
-
flexi2202 Messages postés 3640 Date d'inscription Statut Membre Dernière intervention -
flexi2202 Messages postés 3640 Date d'inscription Statut Membre Dernière intervention -
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
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
-
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.
-
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 ?-
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.- 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>
-
-
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"; } }