Envois mail en html (petit beug)

Résolu/Fermé
Sinistrus Messages postés 1017 Date d'inscription mercredi 12 décembre 2007 Statut Membre Dernière intervention 6 juin 2023 - 8 janv. 2015 à 17:07
Sinistrus Messages postés 1017 Date d'inscription mercredi 12 décembre 2007 Statut Membre Dernière intervention 6 juin 2023 - 9 janv. 2015 à 13:26
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 :
<?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:

10 réponses

jordane45 Messages postés 38145 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 25 avril 2024 4 650
8 janv. 2015 à 17:12
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)
$f_Body = isset($f_Body) ? htmlentities($f_Body, ENT_QUOTES, "UTF-8") :'Aucune Information disponible dans le Body !';



0
Mouslim02 Messages postés 318 Date d'inscription lundi 28 juillet 2014 Statut Membre Dernière intervention 4 juin 2015 11
Modifié par Mouslim02 le 8/01/2015 à 17:12
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"
0
Sinistrus Messages postés 1017 Date d'inscription mercredi 12 décembre 2007 Statut Membre Dernière intervention 6 juin 2023 17
8 janv. 2015 à 17:18
J'ai ajouté la ligne 14 et supprimé une répétition en gardant que :
$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...
0
jordane45 Messages postés 38145 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 25 avril 2024 4 650
8 janv. 2015 à 17:22
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 :
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>";
0
Sinistrus Messages postés 1017 Date d'inscription mercredi 12 décembre 2007 Statut Membre Dernière intervention 6 juin 2023 17
8 janv. 2015 à 17:29
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 :
<?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--
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
jordane45 Messages postés 38145 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 25 avril 2024 4 650
8 janv. 2015 à 17:54
Tu as encore de la répétition...

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

?>

0
Sinistrus Messages postés 1017 Date d'inscription mercredi 12 décembre 2007 Statut Membre Dernière intervention 6 juin 2023 17
8 janv. 2015 à 18:06
Waw ! C'est chaud !
Toujours pareil, je reçois toujours en texte.

Dis, tu penses pas que c'est dû au $_POST ?
0
jordane45 Messages postés 38145 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 25 avril 2024 4 650
8 janv. 2015 à 18:16
Et que donne les ECHO que j'ai ajouté au code ???
0
Sinistrus Messages postés 1017 Date d'inscription mercredi 12 décembre 2007 Statut Membre Dernière intervention 6 juin 2023 17
8 janv. 2015 à 18:19
Voici le message envoyé :
<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 !
0
jordane45 Messages postés 38145 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 25 avril 2024 4 650
8 janv. 2015 à 18:25
Bref... Il n'y a, null part, du HTML dans ton message ....
$f_Body .. contient uniquement "Bonjour à tous !"

Donc tu ne risque pas d'avoir du HTML dans tes mails....

Le souci se situe donc lors de la génération du POST.
0
Sinistrus Messages postés 1017 Date d'inscription mercredi 12 décembre 2007 Statut Membre Dernière intervention 6 juin 2023 17
8 janv. 2015 à 18:36
Dans le code source on trouve bien :

$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 ?
0
jordane45 Messages postés 38145 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 25 avril 2024 4 650
8 janv. 2015 à 18:45
Heuu....
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/
0
Sinistrus Messages postés 1017 Date d'inscription mercredi 12 décembre 2007 Statut Membre Dernière intervention 6 juin 2023 17
8 janv. 2015 à 21:14
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.
0
Sinistrus Messages postés 1017 Date d'inscription mercredi 12 décembre 2007 Statut Membre Dernière intervention 6 juin 2023 17
9 janv. 2015 à 13:26
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>";}}}}
0