Envoyer mail html en php- mail recu avec codes

Fermé
langelier Messages postés 18 Date d'inscription vendredi 1 février 2013 Statut Membre Dernière intervention 18 juin 2022 - Modifié par langelier le 7/02/2013 à 04:49
Alain_42 Messages postés 5361 Date d'inscription dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017 - 15 mars 2013 à 13:28
Bonjour,



je cherche depuis plusieurs jours pourquoi mes mails sont recus avec tout l'encodage e plus du texte genre

Return-Path: <info@monsite.com>
MIME-Version: 1.0
Content-Type: multipart/alternative; boundary="-----=b9a1c8cc4369a8633381700ee269e523"Avis aux membres voituriers de .

This is a multi-part message in MIME format.

-------=b9a1c8cc4369a8633381700ee269e523
Content-Type: text/html; charset="UTF-8"
Content-Transfer-Encoding: 8bit

Bonjour,

Premièrement, nous tenons a vous dire merci pour votre inscription comme membre chez weziwezo.com et nous sommes fiers de vous compter parmi nos membres voituriers.


je tiens a faire accentuer mes textes et j'utilise ce code de format et d'envoi de mail


je crois que l'erreur viens de ce bout de code, du moins je pense bien

<?php
//----------------------------------------------- 
		//GENERE LA FRONTIERE DU MAIL ENTRE TEXTE ET HTML 
		//----------------------------------------------- 

		$frontiere = '-----=' . md5(uniqid(mt_rand())); 

		//----------------------------------------------- 
		//HEADERS DU MAIL 
		//----------------------------------------------- 
		
		//$headers = 'From: '.$email_expediteur.''."\r\n";
		$headers = 'From: <'.$email_expediteur.'>'."\n\n"; 
		$headers .= 'Return-Path: <'.$email_reply.'>'."\r\n"; 
		$headers .= 'MIME-Version: 1.0'."\r\n"; 
		$headers .= 'Content-Type: multipart/alternative; boundary="'.$frontiere.'"'; 
		$headers .= $sujet."\r\n";	
		$headers.="\r\n";
		//----------------------------------------------- 
		//MESSAGE TEXTE 
		//----------------------------------------------- 
		$message = 'This is a multi-part message in MIME format.'."\n\n"; 

		$message .= '--'.$frontiere."\n"; 
		$message.= "Content-Type: text/html; charset=\"UTF-8\""."\n";
		//$message .= 'Content-Type: text/plain; charset="iso-8859-1"'."\n"; 
		$message .= 'Content-Transfer-Encoding: 8bit'."\n\n"; 
		$message .= $message_texte."\n\n"; 

		//----------------------------------------------- 
		//MESSAGE HTML 
		//----------------------------------------------- 
		$message .= '--'.$frontiere."\n";
		//$message .= 'Content-Type: text/html; charset="iso-8859-1"'."\n";
		//$message.="Content-Type: text/html; charset=utf-8\n";
		$message.= "Content-Type: text/html; charset=\"UTF-8\""."\n";
		$message .= 'Content-Transfer-Encoding: 8bit'."\n\n"; 
		$message .= $message_html."\n\n"; 

		$message .= '--'.$frontiere."\n"; 
		
		$sql=("SELECT id, email 
		FROM membres
		WHERE id IN (17,22,24,124) ");
		
			$data = mysql_query($sql) or die('Erreur - table membres: ' . mysql_error());
			$totalvoituriers = mysql_num_rows($data);
				echo 'nombre de voituriers actifs = '. $totalvoituriers.'<br/>';
		
				
				
		while($info = mysql_fetch_assoc($data, MYSQL_ASSOC )) {
			
			$emailVoituriers= ($info['email']);
		
			$tableau_res = array();
			$tableau_res[$info['id']] = ($info);
			
		mail($info['email'], $sujet, $message, $headers);
		
	}
?>
A voir également:

14 réponses

Salut si vous utilisez un type MIME e HTML il faut rédiger le message(le contenu de $message) en HTML, ceci dit je ne suit pas sûr et ça dépends beaucoup aussi des sécurités des (différents) service de messagerie, donc de la boîte mail.

Tout ce que je sait c'est que\n indique un retour à la ligne php et que bien sûr il ne sera pas prit en compte en HTML(si vous sautez une ligne en HTML celle ci n'est pas sauté dans l'affichage il faut mettre </br>)

Essayez de regarder un exemple parmi les nombreux exemples d'envois de mail sur le net, mais comme je vous dit c'est assez galère voire impossible que ça passe sur toutes les boîtes mail; il existe des astuces qui permettront d'avoir un affichage correct mais qui dit astuce dit perte du respect des normes et/ou bricolage.
1
Utilisateur anonyme
7 févr. 2013 à 15:42
Bonjour

Pas sûr, mais il me semble que le double \n marque la fin des headers. Je pense que tu as fait une faute de frappe à la fin ce cette ligne :

$headers = 'From: <'.$email_expediteur.'>'."\n\n"; 
1
Icarenna Messages postés 121 Date d'inscription dimanche 1 avril 2012 Statut Membre Dernière intervention 30 mai 2013 129
7 févr. 2013 à 16:46
Bonjour, je crois que à la fin c'est "\n.\n", il manquerait un "." non?
0
langelier Messages postés 18 Date d'inscription vendredi 1 février 2013 Statut Membre Dernière intervention 18 juin 2022
8 févr. 2013 à 03:33
merci bien pour vos réponses et pour l'erreur de syntaxe a mon headers
que j'ai corrigé comme suit :
$headers = 'From: <'.$email_expediteur.'>'."\n";

mais ca ne regle pas le problème totalement car chez gmail, on recoit le mail encore avec les caraceres codes mime ainsi que le message texte et apres le message html avec toutes les balises html.

de plus, j'ai une image d'inclu avec le texte html avec une classe floote a droite.
- sur hotmail, l'image est la mais ne flotte pas.

-sur thundebird, l'image flotte a droite mais n,est pas afficher comme ne trouve pas le lien de l'image.

- et gmail ben, c'est comme je disais tantot

j'aurais besoin d'un bon tuto pour la syntaxe avec les headers dans un mail car sur le web présentement on trouve différentes signifactions pour le meme sujet

aurais-je donc d'autres erreurs de syntaxe ? voici la mise a jour de mon code



//----------------------------------------------- 
		//GENERE LA FRONTIERE DU MAIL ENTRE TEXTE ET HTML 
		//----------------------------------------------- 

		$frontiere = '-----=' . md5(uniqid(mt_rand())); 

		//----------------------------------------------- 
		//HEADERS DU MAIL 
		//----------------------------------------------- 
		
		
		$headers = 'From: <'.$email_expediteur.'>'."\n";
		$headers .= 'Return-Path: <'.$email_reply.'>'."\r\n"; 
		$headers .= 'MIME-Version: 1.0'."\r\n"; 
		$headers .= 'Content-Type: multipart/alternative; boundary="'.$frontiere.'"'; 
		$headers .= $sujet."\r\n";	
		$headers.="\r\n";
		//----------------------------------------------- 
		//MESSAGE TEXTE 
		//----------------------------------------------- 
		$message = 'This is a multi-part message in MIME format.'."\n"; 

		$message .= '--'.$frontiere."\n"; 
		$message.= "Content-Type: text/html; charset=\"UTF-8\""."\n";
		//$message .= 'Content-Type: text/plain; charset="iso-8859-1"'."\n"; 
		$message .= 'Content-Transfer-Encoding: 8bit'."\n"; 
		$message .= $message_texte."\r\n"; 

		//----------------------------------------------- 
		//MESSAGE HTML 
		//----------------------------------------------- 
		$message .= '--'.$frontiere."\n";
		//$message .= 'Content-Type: text/html; charset="iso-8859-1"'."\n";
		//$message.="Content-Type: text/html; charset=utf-8\n";
		$message.= "Content-Type: text/html; charset=\"UTF-8\""."\n";
		
		
	//	+ un stripslashes et ca fonction parfaitement! a essayer apres avoir essayer decode
		$message .= 'Content-Transfer-Encoding: 8bit'."\n\n"; 
		$message .= $message_html."\n\n"; 

		$message .= '--'.$frontiere."\n"; 
		
		$sql=("SELECT id, email 
		FROM membres
		WHERE id IN (17,22,24,124) ");
		
			$data = mysql_query($sql) or die('Erreur - table membres: ' . mysql_error());
			$totalvoituriers = mysql_num_rows($data);
				echo 'nombre de voituriers actifs = '. $totalvoituriers.'<br/>';
		
				echo '<p>Voici les adresses email :';
				
		while($info = mysql_fetch_assoc($data, MYSQL_ASSOC )) {
			
			$emailVoituriers= ($info['email']);
			//	echo ($emailVoituriers);
			$tableau_res = array();
			$tableau_res[$info['id']] = ($info);
			
		mail($info['email'], $sujet, $message, $headers);
		echo $info['email'].',';
	}

0

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

Posez votre question
Utilisateur anonyme
8 févr. 2013 à 09:12
Je ne comprends pas ta logique d'écriture des headers : tantôt tu termines par \n, tantôt par \r\n, tantôt par rien du tout (Content-Type) . De plus, je crois qu'il te manque un "Subject: " à ton sujet.
Remets un peu d'ordre dans tout ça, ça va sûrement améliorer un certain nombre de choses.

Pour ce qui est du rendu du HTML selon les logiciels utilisés, je ne maîtrise pas assez pour te donner de bons conseils, mais quand on voit le mal qu'on a déjà avec les vrais navigateurs, il ne faut pas s'attendre à des merveilles avec les logiciels de courriel. Il faut s'en tenir à du html le plus basique possible.
0
langelier Messages postés 18 Date d'inscription vendredi 1 février 2013 Statut Membre Dernière intervention 18 juin 2022
Modifié par langelier le 8/02/2013 à 18:25
bon, j'ai refait le script se basant sur un tuto sur le web soit sur https://www.vulgarisation-informatique.com/
yen a qui travaillent avec des r/n et d'autres avec des nn ce qui fait que je sais pu vraiment ou commecer et finir avec cet histoire de saut a la ligne.

Et ca fonctionne pas sur gmail. les autres navigateur c'est bon


<?php 

//-----------------------------------------------  
  //GENERE LA FRONTIERE DU MAIL ENTRE TEXTE ET HTML  
  //-----------------------------------------------  

  $frontiere = '-----=' . md5(uniqid(mt_rand()));  

  //-----------------------------------------------  
  //HEADERS DU MAIL  
  //-----------------------------------------------  
   
   
  $headers = 'From: <'.$email_expediteur.'>'."\n"; 
  $headers .= 'Return-Path: <'.$email_reply.'>'."\n";  
  $headers .= 'MIME-Version: 1.0'."\n";  
  $headers .= 'Content-Type: multipart/alternative; boundary="'.$frontiere.'"';  
  $headers .= $sujet."\n";  
  //$headers.="\n"; 
  //-----------------------------------------------  
  //MESSAGE TEXTE  
  //-----------------------------------------------  
  $message = 'This is a multi-part message in MIME format.'."\n\n";  
  $message .= '--'.$frontiere."\n";  
  $message.= 'Content-Type: text/html; charset=\"UTF-8\"'."\n"; 
  //$message .= 'Content-Type: text/plain; charset="iso-8859-1"'."\n";  
  $message .= 'Content-Transfer-Encoding: 8bit'."\n";  
  $message .= $message_texte."\n\n";  

  //-----------------------------------------------  
  //MESSAGE HTML  
  //-----------------------------------------------  
   
  $message .= '--'.$frontiere."\n"; 
  $message.= 'Content-Type: text/html; charset=\"UTF-8\"'."\n"; 
  $message .= 'Content-Transfer-Encoding: 8bit'."\n\n";  
  $message .= $message_html."\n\n";  
  $message .= '--'.$frontiere."\n";  
   
  //-----------------------------------------------  
     //PIECE JOINTE  
     //-----------------------------------------------  

   //  $message .= 'Content-Type: image/jpeg; name="covoiturageautopetit.jpg"'."\n";  
   //  $message .= 'Content-Transfer-Encoding: base64'."\n";  
   //  $message .= 'Content-Disposition:attachement; filename="covoiturageautopetit.jpg"'."\n\n";  

   //  $message .= chunk_split(base64_encode(file_get_contents('../images/covoiturageautopetit.jpg')))."\n";  
   
   
   
  $sql=("SELECT id, email  
  FROM membres 
  WHERE id IN (17,22,24,124) "); 
   
   $data = mysql_query($sql) or die('Erreur - table membres: ' . mysql_error()); 
   $totalvoituriers = mysql_num_rows($data); 
    echo 'nombre de voituriers actifs = '. $totalvoituriers.'<br/>'; 
   
    echo '<p>Voici les adresses email :'; 
     
  while($info = mysql_fetch_assoc($data, MYSQL_ASSOC )) { 
    
   $emailVoituriers= ($info['email']); 
    
  mail($info['email'], $sujet, $message, $headers); 
  echo $info['email'].','; 
 } 
?> 

0
Utilisateur anonyme
9 févr. 2013 à 00:33
Tu n'as pas lu ce que j'avais écrit ?
Il te manque une fin de ligne à ton header Content-Type: multipart/alternative; et il te manque Subject: à ton header subject

  $headers .= 'Content-Type: multipart/alternative; boundary="'.$frontiere.'"'."\n";  
  $headers .="Subject: $sujet\n"; 
0
Alain_42 Messages postés 5361 Date d'inscription dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017 894
9 févr. 2013 à 14:07
et si tu essayait avec la classe PHPMailer ?
0
langelier Messages postés 18 Date d'inscription vendredi 1 février 2013 Statut Membre Dernière intervention 18 juin 2022
9 févr. 2013 à 22:40
merci le pere pour ton soutien et j'en suis reconnaissant

pour la variable $sujet ya pas de probleme, la valeur avait été déclarer au debut du code apres le if (submit ...

mais j'ai chang. la ligne du content-type pour ajouter une fin de ligne

$headers .= 'Content-Type: multipart/alternative; boundary="'.$frontiere.'"'."\n"; 


il s'est produit des changements a l'affichage dans gmail

il recois le mail avec l'adresse de l'expéditeur et le sujet mais pas de corps du sujet rien

Et pour la réponse de Alain,
Eb bien justement, jY songe depuis quelques jours aux classes mail, j'ai vu sur le net qu'il existe 3 ou 4 peut-etre même plus mais la j'hésitais entre Php Mailer ou pear!

c'est a partir de quel site est-il préférable de la télécharger ?
recommande tu un bon tuto en francais sur phpMailer ?

merci
0
Utilisateur anonyme
9 févr. 2013 à 23:09
pour la variable $sujet ya pas de probleme,
C'est toi qui le dis, mais vu ce que tu as écrit par ailleurs, je me permets d'en douter.
J'insiste :
$headers .="Subject: $sujet\n"; 

Ton header sujet commence-t-il bien par Subject: suivi d'un espace puis du sujet proprement dit ?
Car c'est ce mot Subject: qui fait que cet en-tête définit le sujet.
J'espère aussi que tu n'utilises pas de caractères spéciaux dans ton sujet, sinon il faut les échapper (et pas avec de simples \, c'est un peu plus compliqué que ça )

Ceci étant dit, si tu veux simplement envoyer des mails et que ça ne t'intéresse pas de comprendre comment ça marche, Alain_42 a raison, utilise PHPmailer.
0
Alain_42 Messages postés 5361 Date d'inscription dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017 894
Modifié par Alain_42 le 10/02/2013 à 15:14
salut,

- un tuto sur l'envoi de mail (sans PHPMailher):
https://openclassrooms.com/fr/courses

- un tuto en français avec PHPMailer:
https://stephaneey.developpez.com/tutoriel/php/phpmailer/

Par contre je ne pense pas que sujet soit dans le $header puisque la fonction mail c'est:
mail(destinataire, sujet,message,entete)
0
merci alain42 pour les infos. j'ai lu le tuto pour le mail sans cla classe php et ajuster mon script alors les résultats sont 100% avec gmail mais un probleme d'accent sur hotmail. bon exactement le contraire de ma situation précéedente.

alors j'ai télécharger la classe PhpMailer ainsi que lu le tuto et j'ai un probleme non pas a l'envoi du mail mais encore avec la reception du mail c.a.d je recois le mail avec les balises html sur tous les navigateurs
0
Alain_42 Messages postés 5361 Date d'inscription dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017 894
12 févr. 2013 à 08:42
il doit te manquer html dans les parametres, lorsque tu initialise l'instance phpmailer
0
langelier Messages postés 18 Date d'inscription vendredi 1 février 2013 Statut Membre Dernière intervention 18 juin 2022
Modifié par langelier le 14/03/2013 à 23:36
salut Alain,

désolé pour tout ce laps de temps mais j'étais occupé ailleurs ces derniers temps.

merci de te réponse mais comment modifie t-on les parametres pour html dans php Mailer ?
0
Alain_42 Messages postés 5361 Date d'inscription dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017 894
15 mars 2013 à 13:28
comment modifie t-on les parametres pour html dans php Mailer ?
en fait tu ne modifies pas les parametres dans phpmailer, mais tu creé une instance phpmailer et tu lui passes les parametres

exemple:
       
//initialisation de l'instance
 $mail = new PHPmailer(); 
   //parametres
         

        $mail->IsHTML(true); 

        $mail->Host='hote_smtp';

//etc..
 


vas voir ce tuto:
https://stephaneey.developpez.com/tutoriel/php/phpmailer/
0