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

Résolu/Fermé
monkey_monk Messages postés 641 Date d'inscription mercredi 1 juillet 2009 Statut Membre Dernière intervention 10 août 2012 - 31 janv. 2010 à 16:18
monkey_monk Messages postés 641 Date d'inscription mercredi 1 juillet 2009 Statut Membre Dernière intervention 10 août 2012 - 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 ! ;)
A voir également:

4 réponses

monkey_monk Messages postés 641 Date d'inscription mercredi 1 juillet 2009 Statut Membre Dernière intervention 10 août 2012 128
31 janv. 2010 à 19:31
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 ! ;)
1
giheller Messages postés 1875 Date d'inscription dimanche 14 juin 2009 Statut Membre Dernière intervention 3 février 2024 142
31 janv. 2010 à 16:43
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 ?
0
monkey_monk Messages postés 641 Date d'inscription mercredi 1 juillet 2009 Statut Membre Dernière intervention 10 août 2012 128
31 janv. 2010 à 16:51
Et bien, j'ai essayé mais le résultat est le même... je ne sais vraiment pas ce que je fais mal...
0
giheller Messages postés 1875 Date d'inscription dimanche 14 juin 2009 Statut Membre Dernière intervention 3 février 2024 142
31 janv. 2010 à 17:09
ce code fonctionne sur un de mes sites : (avec le fichier class.mail.php disponble ici ; https://www.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()'>";

?>
0