Envois mail en html (petit beug)
Résolu
Sinistrus
Messages postés
1010
Date d'inscription
Statut
Membre
Dernière intervention
-
Sinistrus Messages postés 1010 Date d'inscription Statut Membre Dernière intervention -
Sinistrus Messages postés 1010 Date d'inscription Statut Membre Dernière intervention -
Bonjour à tous !
Voilà, lorsque j'envoie mon mail, il arrive au format html mais seulement si je met le texte en dur dans mon code.
Lors de l'affichage, si je met du html dans ma zone de texte ($f_Body), celui-ci n'est pas pris en compte.
Voici tout mon code :
Le mail arrive à tous les destinataire, mais non au format html.
Merci de votre aide !
Voilà, lorsque j'envoie mon mail, il arrive au format html mais seulement si je met le texte en dur dans mon code.
Lors de l'affichage, si je met du html dans ma zone de texte ($f_Body), celui-ci n'est pas pris en compte.
Voici tout mon code :
<?php $StyleErreur="border-color:rgba(255, 41, 54, 0.8); outline:0; outline:thin dotted \9; -webkit-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075),0 0 8px rgba(255, 41, 54, 0.6); -moz-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075),0 0 8px rgba(255, 41, 54, 0.6); box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075),0 0 8px rgba(255, 41, 54, 0.6);"; if(isset($_POST['EnvoyerMail'])){$erreur=""; while(list($var,$val)=each($_POST)){if(!is_array($val)){$$var=strip_tags($val);} else{while(list($arvar,$arval)=each($val)){$$var[$arvar]=strip_tags($arval);}}} $f_Sujet = trim(preg_replace("[^a-zA-Z0-9éèàäö\ -]", "", $f_Sujet)); $f_Entete = $f_Entete; $f_Body = $f_Body; $f_Pied = $f_Pied; if(strlen($f_Sujet)<2) {$erreur.="<li><strong>Sujet du message</strong> vide"; $errf_Sujet=1;} if(strlen($f_Body)<2) {$erreur.="<li><strong>Corps du message</strong> vide"; $errf_Body=1;} if($erreur==""){ $db = mysql_connect(MYSQL_HOST, MYSQL_USER, MYSQL_PASS); mysql_select_db(MYSQL_BASE,$db); $sql = 'SELECT * FROM tb_newsletter_adresses'; $req = mysql_query($sql) or die($sql."<br />".mysql_error()); while($data = mysql_fetch_assoc($req)){ $dest= $data['Newsletter'].","; if (!preg_match("#^[a-z0-9._-]+@(hotmail|live|msn).[a-z]{2,4}$#", $dest)) {$rn = "\r\n";} else {$rn = "\n";} $My_Header = "<html><head></head><body>"; $My_Footer = "</body></html>"; $My_Messag = $My_Header.$f_Body.$My_Footer; $bound = "-----=".md5(rand()); $titre = $f_Sujet; $tete = "From: Newsletter <newsletter@sivop.com>".$rn; $tete.= "MIME-Version: 1.0".$rn; $tete.= "Content-Type: multipart/alternative;".$rn." boundary=\"$bound\"".$rn; $corps = $rn."--".$bound.$rn; $corps.= "Content-Type: text/plain; charset=\"ISO-8859-1\"".$rn; $corps.= "Content-Transfer-Encoding: 8bit".$rn; $corps.= $rn.$My_Messag.$rn; $corps.= $rn."--".$bound.$rn; $corps.= "Content-Type: text/html; charset=\"ISO-8859-1\"".$rn; $corps.= "Content-Transfer-Encoding: 8bit".$rn; $corps.= $rn.$My_Messag.$rn; $corps.= $rn."--".$bound."--".$rn; $corps.= $rn."--".$bound."--".$rn; if(mail($dest, $titre, $corps, $tete)){$ok_mail="true";}else{$erreur.="<div class='DivError TexteError'><li>Erreur d'envois</div>";}}}} ?>
Le mail arrive à tous les destinataire, mais non au format html.
Merci de votre aide !
A voir également:
- Envois mail en html (petit beug)
- Editeur html - Télécharger - HTML
- Publipostage mail - Accueil - Word
- Windows live mail - Télécharger - Mail
- Petit 1 comme ² ✓ - Forum Windows
- Comment imprimer une photo en petit ✓ - Forum Photo numérique
10 réponses
Bonjour,
As tu regardé ce que contenait ta variable $f_Body ?
Il se peut que tu doives utiliser le htmlentities.
Essaye ceci: (ligne 14 de ton script)
As tu regardé ce que contenait ta variable $f_Body ?
Il se peut que tu doives utiliser le htmlentities.
Essaye ceci: (ligne 14 de ton script)
$f_Body = isset($f_Body) ? htmlentities($f_Body, ENT_QUOTES, "UTF-8") :'Aucune Information disponible dans le Body !';
salut
je pense quil faudrais enlever le "text/plain" a la 43 eme ligne et mettre "text/html" a sa place
je m'etonne aussi pouquoi il y a des répétitions dans ton code à la ligne 42
bon courage ;)
le bon comportement c'est important !
de bonnes personnes sont celles qui vont voir "Ils ont besoin de votre aide" de meilleurs personnes sont celles qui cliquent sur "tout les messages sans reponses"
je pense quil faudrais enlever le "text/plain" a la 43 eme ligne et mettre "text/html" a sa place
je m'etonne aussi pouquoi il y a des répétitions dans ton code à la ligne 42
bon courage ;)
le bon comportement c'est important !
de bonnes personnes sont celles qui vont voir "Ils ont besoin de votre aide" de meilleurs personnes sont celles qui cliquent sur "tout les messages sans reponses"
J'ai ajouté la ligne 14 et supprimé une répétition en gardant que :
Malgré tout, il ne fonctionne toujours pas !
Ce qui me parait idiot c'est que si je met le code html dans $f_Body =""; là il fonctionne...
$My_Header = "<html><head></head><body>"; $My_Footer = "</body></html>"; $My_Messag = $My_Header.$f_Body.$My_Footer; $bound = "-----=".md5(rand()); $titre = $f_Sujet; $tete = "From: Newsletter <newsletter@sivop.com>".$rn; $tete.= "MIME-Version: 1.0".$rn; $tete.= "Content-Type: multipart/alternative;".$rn." boundary=\"$bound\"".$rn; $corps.= $rn."--".$bound.$rn; $corps.= "Content-Type: text/html; charset=\"ISO-8859-1\"".$rn; $corps.= "Content-Transfer-Encoding: 8bit".$rn; $corps.= $rn.$My_Messag.$rn; $corps.= $rn."--".$bound."--".$rn; $corps.= $rn."--".$bound."--".$rn;
Malgré tout, il ne fonctionne toujours pas !
Ce qui me parait idiot c'est que si je met le code html dans $f_Body =""; là il fonctionne...
Humm...
tu peux reposter ton code ENTIER ?
Quand tu dis.. je AJOUTE le ligne 14 ... j'ai peur...
Il faut la REMPLACER par l'ajouter !
Et je repose la question....
AS tu regardé ce que contenait ta variable (avant l'envoie du mail ) ???
Avant la ligne :
Ajoute ceci et regarde ce que ça donne :
tu peux reposter ton code ENTIER ?
Quand tu dis.. je AJOUTE le ligne 14 ... j'ai peur...
Il faut la REMPLACER par l'ajouter !
Et je repose la question....
AS tu regardé ce que contenait ta variable (avant l'envoie du mail ) ???
Avant la ligne :
if(mail($dest, $titre, $corps, $tete)){$ok_mail="true";}else{$erreur.="<div class='DivError TexteError'><li>Erreur d'envois</div>";}}}}
Ajoute ceci et regarde ce que ça donne :
echo "<pre>".$corps."</pre>";
D'abord tu as raison il y avait une répétition text/plain et text/html
J'ai supprimé la répétition et voici le code complet avec toutes modifications :
Et voici ce que je reçois dans l'echo :
J'ai supprimé la répétition et voici le code complet avec toutes modifications :
<?php if(isset($_POST['EnvoyerMail'])){$erreur=""; while(list($var,$val)=each($_POST)){if(!is_array($val)){$$var=strip_tags($val);} else{while(list($arvar,$arval)=each($val)){$$var[$arvar]=strip_tags($arval);}}} $f_Sujet = trim(preg_replace("[^a-zA-Z0-9éèàäö\ -]", "", $f_Sujet)); $f_Body = isset($f_Body) ? htmlentities($f_Body, ENT_QUOTES, "UTF-8") :'Aucune Information disponible dans le Body !'; if(strlen($f_Sujet)<2) {$erreur.="<li><strong>Sujet du message</strong> vide"; $errf_Sujet=1;} if(strlen($f_Body)<2) {$erreur.="<li><strong>Corps du message</strong> vide"; $errf_Body=1;} if($erreur==""){ $db = mysql_connect(MYSQL_HOST, MYSQL_USER, MYSQL_PASS); mysql_select_db(MYSQL_BASE,$db); $sql = 'SELECT * FROM tb_newsletter_adresses'; $req = mysql_query($sql) or die($sql."<br />".mysql_error()); while($data = mysql_fetch_assoc($req)){ $dest= $data['Newsletter'].","; if (!preg_match("#^[a-z0-9._-]+@(hotmail|live|msn).[a-z]{2,4}$#", $dest)) {$rn = "\r\n";} else {$rn = "\n";} $My_Header = "<html><head></head><body>"; $My_Footer = "</body></html>"; $My_Messag = $My_Header.$f_Body.$My_Footer; $bound = "-----=".md5(rand()); $titre = $f_Sujet; $tete = "From: Newsletter <newsletter@sivop.com>".$rn; $tete.= "MIME-Version: 1.0".$rn; $tete.= "Content-Type: multipart/mixed;".$rn." boundary=\"$bound\"".$rn; $corps.= $rn."--".$bound.$rn; $corps.= "Content-Type: text/html; charset=\"ISO-8859-1\"".$rn; $corps.= "Content-Transfer-Encoding: 8bit".$rn; $corps.= $rn.$My_Messag.$rn; $corps.= $rn."--".$bound."--".$rn; $corps.= $rn."--".$bound."--".$rn; echo "<pre>".$corps."</pre>"; if(mail($dest, $titre, $corps, $tete)){$ok_mail="true";}else{$erreur.="<div class='DivError TexteError'><li>Erreur d'envois</div>";}}}} ?>
Et voici ce que je reçois dans l'echo :
-------=a7e95688645a03a658bc2307b73a17ff
Content-Type: text/html; charset="ISO-8859-1"
Content-Transfer-Encoding: 8bit
Bonjour
-------=a7e95688645a03a658bc2307b73a17ff--
-------=a7e95688645a03a658bc2307b73a17ff--
-------=121b8720bd929cd996d9af82fa29e6bd
Content-Type: text/html; charset="ISO-8859-1"
Content-Transfer-Encoding: 8bit
Bonjour
-------=121b8720bd929cd996d9af82fa29e6bd--
-------=121b8720bd929cd996d9af82fa29e6bd--
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Tu as encore de la répétition...
Tu peux tester ça :
Tu peux tester ça :
<?php if(isset($_POST['EnvoyerMail'])){$erreur=""; while(list($var,$val)=each($_POST)){ if(!is_array($val)){$$var=strip_tags($val); }else{ while(list($arvar,$arval)=each($val)){ $$var[$arvar]=strip_tags($arval); } } } $f_Sujet = trim(preg_replace("[^a-zA-Z0-9éèàäö\ -]", "", $f_Sujet)); //------------------------------------------------ // le temps des tests : //------------------------------------------------ echo "<pre> Body<br>"; print_r($f_Body); echo "</pre>"; //------------------------------------------------ $f_Body = isset($f_Body) ? htmlentities($f_Body, ENT_QUOTES, "UTF-8") :''; if(strlen($f_Sujet)<2) {$erreur.="<li><strong>Sujet du message</strong> vide"; $errf_Sujet=1;} if(strlen($f_Body)<2) {$erreur.="<li><strong>Corps du message</strong> vide"; $errf_Body=1;} if($erreur==""){ $db = mysql_connect(MYSQL_HOST, MYSQL_USER, MYSQL_PASS); mysql_select_db(MYSQL_BASE,$db); $sql = 'SELECT * FROM tb_newsletter_adresses'; $req = mysql_query($sql) or die($sql."<br />".mysql_error()); while($data = mysql_fetch_assoc($req)){ $dest= $data['Newsletter'].","; if (!preg_match("#^[a-z0-9._-]+@(hotmail|live|msn).[a-z]{2,4}$#", $dest)) { $rn = "\r\n"; } else { $rn = "\n"; } $My_Header = "<html><head></head><body>"; $My_Footer = "</body></html>"; $My_Messag = $My_Header.$f_Body.$My_Footer; $boundary = md5(uniqid(microtime(), TRUE)); $titre = $f_Sujet; //création du Header $headers = "From: Newsletter <newsletter@sivop.com>".$rn; $headers .= 'Mime-Version: 1.0'.$rn; $headers .= 'Content-Type: multipart/mixed;boundary='.$boundary.$rn; $headers .= $rn; // Creation du message a envoyer // ----------------------------- $corps = '--' . $boundary .$rn; $corps .= 'Content-type: text/html; charset=ISO-8859-15' .$rn.$rn; $corps .= $My_Messag.$rn; //------------------------------------------------ // le temps des tests : //------------------------------------------------ echo "<pre> Message <br>".$My_Messag."</pre>"; echo "<pre> Corps <br>".$corps."</pre>"; //------------------------------------------------ if(mail($dest, $titre, $corps, $headers)){ $ok_mail="true"; }else{ $erreur.="<div class='DivError TexteError'><li>Erreur d'envois</div>"; } // Fin if(mail } // Fin while($data } // Fin if($erreur } // Fin if(isset($_POST ?>
Waw ! C'est chaud !
Toujours pareil, je reçois toujours en texte.
Dis, tu penses pas que c'est dû au $_POST ?
Toujours pareil, je reçois toujours en texte.
Dis, tu penses pas que c'est dû au $_POST ?
Voici le message envoyé :
Voici le résultat de l'echo :
<strong>Bonjour à tous !</strong>
Voici le résultat de l'echo :
Body
Bonjour à tous !
Message
Bonjour à tous !
Corps
--3e8d1daed433fedd5cbda4fa3642641d
Content-type: text/html; charset=ISO-8859-15
Bonjour à tous !
Message
Bonjour à tous !
Corps
--9b76ab12e6305f13e3163059d38487cb
Content-type: text/html; charset=ISO-8859-15
Bonjour à tous !
La lettre d'information a été envoyée avec succès !
--9b76ab12e6305f13e3163059d38487cb
Content-type: text/html; charset=ISO-8859-15
Bonjour à tous !
Dans le code source on trouve bien :
Et la zone de texte $f_Body lors de l'affichage contient
Il concatènera donc :
Pour m'afficher en gras Bonjour à tous !
C'est bien la logique non ?
$My_Header = "<html><head></head><body>";
$My_Footer = "</body></html>";
$My_Messag = $My_Header.$f_Body.$My_Footer;
Et la zone de texte $f_Body lors de l'affichage contient
<strong>Bonjour à tous !</strong>
Il concatènera donc :
<html><head></head><body>
<strong>Bonjour à tous !</strong>
</body></html>
Pour m'afficher en gras Bonjour à tous !
C'est bien la logique non ?
Heuu....
Tu as vu que tu utilisais la fonction strip_tags lorsque tu génère les variables issues de ton POST???
... donc.. normal que tu n'aies pas de balises HTML ...... \o/
Tu as vu que tu utilisais la fonction strip_tags lorsque tu génère les variables issues de ton POST???
strip_tags -- Supprime les balises HTML et PHP d'une chaîne
while(list($var,$val)=each($_POST)){ if(!is_array($val)){$$var=strip_tags($val); }else{ while(list($arvar,$arval)=each($val)){ $$var[$arvar]=strip_tags($arval); } } }
... donc.. normal que tu n'aies pas de balises HTML ...... \o/
Tu as raison, le strip_tags supprime effectivement les balises html et php.
Là je reçois <strong>Bonjour à tous !</strong> dans mon mail :D mais pas en affichage html.
Là je reçois <strong>Bonjour à tous !</strong> dans mon mail :D mais pas en affichage html.
J'ai réussiiiiiiiiiiiiiiiiiiii ! Grâce à toi en tout cas :D
if(isset($_POST['EnvoyerMail'])){$erreur=""; while(list($var,$val)=each($_POST)){ if(!is_array($val)){$$var=$val; }else{ while(list($arvar,$arval)=each($val)){ $$var[$arvar]=$arval; } } } //$f_Sujet = trim(preg_replace("[^a-zA-Z0-9éèàäö\ -]", "", $f_Sujet)); $f_Sujet = utf8_decode($f_Sujet); if(strlen($f_Sujet)<2) {$erreur.="<li><strong>Sujet du message</strong> vide"; $errf_Sujet=1;} if(strlen($f_Body)<2) {$erreur.="<li><strong>Corps du message</strong> vide"; $errf_Body=1;} if($erreur==""){ $db = mysql_connect(MYSQL_HOST, MYSQL_USER, MYSQL_PASS); mysql_select_db(MYSQL_BASE,$db); $sql = 'SELECT * FROM tb_newsletter_adresses'; $req = mysql_query($sql) or die($sql."<br />".mysql_error()); while($data = mysql_fetch_assoc($req)){ $dest= $data['Newsletter'].","; if (!preg_match("#^[a-z0-9._-]+@(hotmail|live|msn).[a-z]{2,4}$#", $dest)) {$rn = "\r\n";} else {$rn = "\n";} $bound = "-----=".md5(rand()); $titre = $f_Sujet; $entete = "From: SIVOP Newsletter <newsletter@sivop.com>".$rn; $entete.= "MIME-Version: 1.0".$rn; $entete.= "Content-Type: multipart/mixed;".$rn." boundary=\"$bound\"".$rn; $corps= $rn."--".$bound.$rn; $corps.= "Content-Type: text/html; charset=\"ISO-8859-1\"".$rn; $corps.= "Content-Transfer-Encoding: 8bit".$rn; $corps.= $rn.$f_Body.$rn; $corps.= $rn."--".$bound."--".$rn; $corps.= $rn."--".$bound."--".$rn; if(mail($dest, $titre, $corps, $entete)){$ok_mail="true";}else{$erreur.="<div class='DivError TexteError'><li>Erreur d'envois</div>";}}}}