Posez votre question Signaler

[PHP]Envoi de mail HTML impossible via mail() [Résolu]

monkey_monk 610Messages postés 1 juillet 2009Date d'inscription 27 mai 2012Dernière intervention - Dernière réponse le 31 janv. 2010 à 19:31
Bonjour,
j'ai un petit problème...je ne parviens pas à envoyer un mail au format HTML via la fonction mail() de PHP.
J'ai pourtant suivit plusieurs tutos en ligne ainsi que passé en revue la doc PHP ...mais rien ne fonctionne !
Voici mon script :
        $destinataire = 'info@monsite.com';
	$objet = 'Test d\'envoi mail html';
	$message = 'test message';
	$name = 'nom@prenom.com';
	$boundary = "---=_Part_".md5(uniqid(rand()));
	
	$headers = 'MIME-Version: 1.0'."\r\n";
	$headers .= 'Content-Type: multipart/mixed; boundary="'.$boundary.'"'."\r\n";
	
	$msg = 'This is a multi-part message in MIME format.'."\n";
	$msg .= 'Ceci est un message est au format MIME.'."\n";
	
	$msg .= "--".$boundary."\n";
	$msg .= 'Content-Type: text/html; charset="iso-8859-1"'."\n";
	$msg .= 'Content-Transfer-Encoding: quoted-printable'."\n";
	$msg .= 'Content-Disposition: inline \n\n';
	$msg .= '<html><head><title>Test mail html</title></head><body>';
	$msg .= '<p>Bonjour,</p>';
	$msg .= '<p>ce mail à été envoyé depuis <strong>Mon Site .com</strong> par '.$name.'</p>';
	$msg .= '<p>****************************************</p>';
	$msg .= '<p><strong>'.$message.'</strong></p>';
	$msg .= '<p>****************************************</p>';
	$msg .= '</body></html>';
	$msg .= "\n\n--".$boundary."\n\n";

	// envoi
	mail($destinataire,$objet,$msg,$headers);

Et le mail que je reçoit est comme ceci :
Content-Type: multipart/mixed; boundary="---=_Part_a535a7b9f85bcef35f46bc31849162bd"
Message-Id: <20100131150508.14974133E3@60gp.ovh.net>
Date: Sun, 31 Jan 2010 16:05:07 +0100 (CET)
From: monsiteo@60gp.ovh.net (monsite)
X-Ovh-Tracer-Id: 11251962194064415914
X-Ovh-Tracer-Id: 11251962195151658154
X-Ovh-Remote: 188.165.45.9 (50.mail-out.ovh.net)
X-Ovh-Local: 213.186.33.29 (mx1.ovh.net)
X-Spam-Check: DONE|U 0.5/N
X-Antivirus: avast! (VPS 100130-1, 30/01/2010), Inbound message
X-Antivirus-Status: Clean


This is a multi-part message in MIME format.
Ceci est un message est au format MIME.
-----=_Part_a535a7b9f85bcef35f46bc31849162bd
Content-Type: text/html; charset="iso-8859-1"
Content-Transfer-Encoding: quoted-printable
Content-Disposition: inline \n\n<html><head><title>Test mail html</title></head><body><p>Bonjour,</p><p>ce mail à été envoyé depuis <strong>Mon Site .com</strong> par nom@prenom.com</p><p>****************************************</p><p><strong>test message</strong></p><p>****************************************</p></body></html>

-----=_Part_a535a7b9f85bcef35f46bc31849162bd

Et comme vous pouvez le voir... ça n'a rien à voir avec un mail au format HTML...
Merci d'avance pour le coup de main ! ;)
Lire la suite 

[PHP]Envoi de mail HTML impossible via mail() »

4 réponses
Réponse
+1
moins plus
Je n'ai pas réussi avec ton code car je n'arrive pas à d/l la classe... mais le problème semble être dans l'ordre des entêtes... le code suivant fonctionne pour moi :
        $destinataire = 'info@monsite.com';
	$name = 'Paul';
	$name_adr = 'nom@prenom.com';
	$objet = 'Mon Site : message de '.$name;
	$message = 'test message';;
	
	$header = 'From: '.$name.' <'.$name_adr.'>'."\n";
	$header .= 'Cc: '."\n";
	$header .= 'Bcc: '."\n";
	$header .= 'Reply-To: '.$name_adr."\n";
	$header .= 'X-Mailer: PHP/'.phpversion()."\n";
	$header .= 'Date :'.date('D, j M Y H:i:s -0600')."\n";
	$header .= 'Mime-version: 1.0'."\n";
	$header .= 'Content-type: text/html; charset=iso-8859-1'."\n";
	
	$msg = '<strong>test</strong><br />';
	$msg .= '<img src="http://www.monsite.com/image.jpg" alt="test" />';

        mail($destinataire,$objet,$msg,$header);


A noter que j'ai du placer les
\n
entre guillemets (
"\n"
) et non entre apostrophes (
'\n'
) !

Merci pour le coup de main et à une prochaine ! ;)
Ajouter un commentaire
Réponse
+0
moins plus
bonjour,

ces informations :
$msg = 'This is a multi-part message in MIME format.'."\n";
$msg .= 'Ceci est un message est au format MIME.'."\n";

$msg .= "--".$boundary."\n";
$msg .= 'Content-Type: text/html; charset="iso-8859-1"'."\n";
$msg .= 'Content-Transfer-Encoding: quoted-printable'."\n";
$msg .= 'Content-Disposition: inline \n\n';

ne devraient-elles pas être dans le headers plutôt que dans le coprs du message ?
Ajouter un commentaire
Réponse
+0
moins plus
Et bien, j'ai essayé mais le résultat est le même... je ne sais vraiment pas ce que je fais mal...
Ajouter un commentaire
Réponse
+0
moins plus
ce code fonctionne sur un de mes sites : (avec le fichier class.mail.php disponble ici ; http://cjoint.com/?bFriJVgnjW )
attn adresse du destinataire à changer

<?php
function traduire($texte) {
//$zone = stripslashes($texte);
$texte = str_replace("'"," ",$texte);
$texte = stripslashes($texte);
return $texte;
}

$adressemail = traduire($_GET["adresse_email"]);
$zone = traduire($_GET["zone"]);
$nompre = traduire($_GET["nompre"]);
echo "<body background='fond.jpg'>";
echo "<font color='blue'>";
echo "xxx vous remercie de votre confiance et met tout en oeuvre pour ";
echo "satisfaire votre demande dans les plus brefs délais</font>";
//---------------------------------

$message= "";
$message .= "<html>";
$message .= "<meta http-equiv='Content-Type' content='text/html; charset=windows-1152'>";
$message .= "<body background='fond.jpg' >";

$message .= "<font color='blue'><br><br><b>Contact</b></font>";
$message .= "<br>";
$message .= "<hr size=2 align=center color='#0000FF'>";
$message .= "<table>";
$message .= "<tr>";
$message .= "<td width=50%>";

$message .= "Identification : $nompre<br>";
$message .= "</tr>"
$message .= "<tr>";
$message .= "<td width=50%>";

$message .= "E-mail : $adressemail<br>";
$message .= "</tr>";
$message .= "</table>";
$message .= "<hr size=2 align=center color='#0000FF'>";


$message .= "$zone<br>";
$message .= "</td></tr></table>";
$message .= "<hr size=2 width='100%' align=center color='#0000FF'>";
$message .= "</html> ";
//-------------------------------
include('class.mail.php');

$mail = new simplemail;
$mail -> addrecipient(destinataire);
$mail -> addfrom('.$adressemail.');
$mail -> addsubject('Contact');

// le message text
//$mail -> text = 'Demande de contact;

// le message format html
$mail -> html = "$message";

if ( $mail -> sendmail() ) { echo "<br>Votre message a été envoyé"; } else { echo "<br>erreur dans l'envoi du message"; echo $mail->error_log; }
echo "<br>";
echo "<input type='button' value=' Terminer ' onclick='javascript:window.close()'>";

?>
Ajouter un commentaire
Ce document intitulé « [PHP]Envoi de mail HTML impossible via mail() » issu de CommentCaMarche (www.commentcamarche.net) est mis à disposition sous les termes de la licence Creative Commons. Vous pouvez copier, modifier des copies de cette page, dans les conditions fixées par la licence, tant que cette note apparaît clairement.
Dossier à la une
Passage au tout numérique : quel coût pour les particuliers ?