Envoi de mail avec mise en forme html et simple

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Envoi de mail avec mise en forme html et simple

par Grincheux » 30 nov. 2006, 09:46

Je sais que ce topic est un peu vieux, mais je viens de me frotter au problème également alors je me dis que la solution intéresse peut-être d'autres personnes.
En fait il faut remplacer le multipart/alternative par multipart/mixed
et la, tout fonctionne ;)

j'en profite pour donner la nouvelle adresse de l'astuce trouvée par RobertVonTagada : http://www.phpinfo.net/page/archives/as ... avigateurs

par RobertVonTagada » 05 mars 2005, 13:31

Je me permet de remonter cette discution pour pointer mon "avancement" !

En gros, sur un autre forum, une personne m'a dit que les en tête html peuvent provoquer le souci d'affichage... dire que j'ai du mal à accepter, du fait que j'ai pas mal de mail contenant les deux types d'affichages contiennent des entêtes html.

Alors voilà, pour faire simple j'ai trouvé un autre script qui prévois à la base la partie texte brut et la partie avec une mise en forme html.
script qui se trouve par là :
http://www.phpinfo.net/astuces/astuces112.html

Je l'ai donc remanié trés légèrement et testé :
function mailDeLaMort($destinataire)
{
$subject = "envoi du site";
$from = "[email protected]";
$limite = "_parties_".md5 (uniqid (rand())); 

$entete = "Reply-to: $from\n"; 
$entete .= "From:$from\n"; 
$entete .= "Date: ".date("l j F Y, G:i")."\n"; 
$entete .= "MIME-Version: 1.0\n"; 
$entete .= "Content-Type: multipart/alternative;\n"; 
$entete .= " boundary=\"----=$limite\"\n\n"; 
	
//Le message en texte simple pour les navigateurs qui 
//n'acceptent pas le HTML 

$texte_simple = "This is a multi-part message in MIME format.\n"; 
$texte_simple .= "Ceci est un message est au format MIME.\n"; 
$texte_simple .= "------=$limite\n"; 
$texte_simple .= "Content-Type: text/plain; charset=\"US-ASCII\"\n"; 
$texte_simple .= "Content-Transfer-Encoding: 7bit\n\n"; 
$texte_simple .= "LALALALALALA";
$texte_simple .= "\n\n"; 

//le message en html original 
$texte_html = "------=$limite\n"; 
$texte_html .= "Content-Type: text/html; charset=\"US-ASCII\"\n"; 
$texte_html .= "Content-Transfer-Encoding: 7bit\n\n"; 
$texte_html .= "LALALALALALA HTM";
$texte_html .= "\n\n\n------=$limite\n"; 

return mail($destinataire, $subject, $texte_simple.$texte_html, $entete);
}
Il n'y a donc aucune entête html ni rien, mais malgrés tout le problème perciste, pas d'affichage sur l'interface en ligne type hotmail ou yahoo...
Les deux modes d'affichage fonctionnant bien depuis mon logiciel de messagerie foxmail.

Vraiment, là, je vois pas où peut être le pb :s je ne comprend pas !

Envoi de mail avec mise en forme html et simple

par RobertVonTagada » 04 mars 2005, 15:49

Bonjour à tous !

Voilà, j'ai un petit blocage sur l'envoi de mail contenant une mise en forme html et une version simple du contenu.
Aprés divers test, je me trouve avec un petit souci que j'aimerais ne pas laisser de côté.

En gros, mon mail part, je le reçois et depuis mon petit logiciel (j'utilise Foxmail), il s'affiche la version simple, et quand je choisi de l'ouvrir en version html, pas de problème non plus, tout y est beau comme je le souhaité !

Mais voilà, mon souci est franchement bête, c'est que depuis une interface type hotmail, ça m'affiche page blanche... rarf !! ça devient frustrant là !!

Je vous colle ma fonction (reprise d'une fonction trouvé sur phpinfo.net), si vous voyez d'où ça peut venir, j'ai pas réussi à trouver moi même :

function mailquilestbo($destinataire,$subject,$corps,$corpsAltern)
{
	$from = "[email protected]";

    $limite1 = md5 (uniqid (rand()));
    //premier boundary
    $limite2 = md5 (uniqid (rand()));
    //second boundary

    $entete = "Return-Path: <$from>\n";
    $entete .= "Delivered-To: $destinataire\n";
    $entete .= "Subject: $subject\n";
    $entete .= "To: $destinataire\n";
    $entete .= "Date: ".date("D, j M Y G:i:s +0200")."\n";
    $entete .= "From: \"Bisounours Action Team\" <$from>\n";
    $entete .= "X-Priority: 3\n";
    $entete .= "X-Mailer: PHP\n";
    $entete .= "MIME-Version: 1.0\n";
    $entete .= "Content-Type: multipart/related;\n  type=multipart/alternative\n    boundary=\"b1_$limite1\"\n";
    //les entêtes du mail
    $body = "--b1_$limite1\n";
    $body .= "Content-Type: multipart/alternative;\n        boundary=\"b2_$limite2\"\n\n";
    $body .= "--b2_$limite2\n";
    $body .= "Content-Type: text/plain; charset = \"iso-8859-1\"\n";
    $body .= "Content-Transfer-Encoding: quoted-printable\n\n\n";
    $body .= $corpsAltern."\n\n";
    $body .= "--b2_$limite2\n";
    $body .= "Content-Type: text/html; charset = \"iso-8859-1\"\n";
    $body .= "Content-Transfer-Encoding: quoted-printable\n\n\n";
    $body .= "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0 Transitional//EN\"><HTML><HEAD>
				  <TITLE>Message du site de la Bisounours Action Team</TITLE>
					</HEAD>
					<BODY BGCOLOR=#660066 LEFTMARGIN=0 TOPMARGIN=0 MARGINWIDTH=0 MARGINHEIGHT=0>
					<p>&nbsp;</p><table width=\"90%\" border=\"0\" align=\"center\" cellpadding=\"0\" cellspacing=\"0\">
					  <tr><td><p><font color=\"#FF0000\" size=\"4\" face=\"Arial, Helvetica, sans-serif\"><strong><em>BISOUNOURS 
							<font color=\"#FFFF33\">ACTION</font> TEAM</em></strong></font></p>
						  <table width=\"90%\" border=\"0\" align=\"center\" cellpadding=\"0\" cellspacing=\"0\">
							<tr> 
							  <td bgcolor=\"#663366\"><font color=\"#FFFFCC\" size=\"2\" face=\"Verdana, Arial, Helvetica, sans-serif\"><strong>> 
								Message du site</strong></font></td>
							</tr><tr> 
							  <td bgcolor=\"#84267A\"><p>&nbsp;</p>";
	$body .= $corps;
	$body .= "				  <p>&nbsp;</p></td>
							</tr><tr> 
							  <td bgcolor=\"#663366\"><div align=\"right\"><font color=\"#FFFFCC\" size=\"2\" face=\"Verdana, Arial, Helvetica, sans-serif\"><strong>.:</strong></font></div></td>
							</tr>
						  </table>
						</td>
					  </tr>
					</table><p>&nbsp;</p>
				</BODY></HTML>\n\n\n";

    $body .= "--b2_$limite2";
    $body .= "--\n\n";
    $body .= "--b1_$limite1";
    $body .= "--\n\n";

    $bool = mail($destinataire, $subject, $body, $entete);
    return $bool;
}
En vous en remerciant par avance !