Newsletter, problème d'affichage du code

Eléphant du PHP | 137 Messages

07 déc. 2005, 21:31

Bonjour,
J'ai crée un système de newsletter où je remplie un textearea et ça envoie le contenu de ce fameux textarea vers les adresses e-mail des membres inscrits. Le seul problème, c'est que lorsque j'envoie du code HTML avec ce système, le code HTML ne s'éxécute pas sur la messagerie et il est affiché tel quel. Auriez-vous une solution à ce problème,
Merci d'avance

Mammouth du PHP | 768 Messages

07 déc. 2005, 21:49

Si le texte n'est pas mis en forme, c'est que le mail part en tête brut.
as tu mis les entêtes nécessaires à l'envoi en html ?
M A R I O
Si une patte de lapin porte bonheur, qu'a-t-il bien pu arriver au lapin ?

Eléphant du PHP | 137 Messages

07 déc. 2005, 22:46

Que voulez-vous dire par les "entêtes nécessaires"?
J'ai bien mis en tout cas les balises HTML, BODY etc... si c'est cela dont vous voulez parler.

Mammouth du PHP | 1311 Messages

07 déc. 2005, 22:53

non c'est pas ca on parle du type mime du fichier c'est a dire text/html

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

08 déc. 2005, 01:04

comment envoie tu les mails ? avec la fonction mail() (il y a un exemple de mail au format HTML) ou autre ?

/!\ Avant de poster se documenter et rechercher.
Qui ne sait pas rendre un service n'a pas le droit d'en demander.
MaBrute

Eléphant du PHP | 137 Messages

08 déc. 2005, 21:32

Voici ma newsletter en HTML tel qu'elle est envoyée :


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta Content-type: text/html; charset=iso-8859-1\r\n />
<title>~~ Felix Felicis ~~ Le site ultime sur Harry Potter!</title>
<meta name="KEYWORDS" content="<?php include "meta_word.txt"; ?>">
<link href="st.css" rel="stylesheet" type="text/css" />
<style type="text/css">
<!--
body {
	background-color: #CC0000;
}
body,td,th {
	font-family: trebuchet MS;
	color: #FFFFFF;
	font-size: 13px;
	font-weight: bold;
}
a:link {
	color: #FFFFFF;
}
a:visited {
	color: #FFFFFF;
}
.Style6 {font-size: 15px}
-->
</style>

</head>

<body topmargin="0" leftmargin="0" text="#FFFFFF" link="#FFFFFF" vlink="#FFFFFF" onLoad="dynAnimation()">
<table width="100%" border="0">
  <tr>
    <td align="center"><img src="http://hpotter.club.fr/VS_5_site.jpg" width="766" height="131" border="0" /></td>
  </tr>
  <tr>
    <td><span class="Style6">---> La newsletter ---> Edition de Janvier 2006 ---> Felix Felicis : http://hpotter.club.fr</span></td>
  </tr>
  <tr>
    <td>&nbsp;</td>
  </tr>
</table>
<body>
</body>
</html>
et le code PHP avec la fonction mail() qui l'envoie :
<?php


include ("**************");

$connexion = mysql_connect($host, $user, $mpasse)
or die ("Connexion à la base impossible"); 

$db = mysql_select_db($database)
or die("Sélection de la base impossible");

 $sql = "SELECT mail FROM membres";
$res = mysql_query($sql) or die(mysql_error());
	
	
while($ligne = mysql_fetch_array($res, MYSQL_ASSOC))
{
$email2 = $ligne[mail];

$headers="From: FelixFelicis";
mail($email2,"La newsletter de FelixFelicis",$text,$headers);
}



?>
et lorsque ça arrive sur Thunderbird, ça m'affiche le HTML en mode texte.
Auriez-vous une solution?

Eléphant du PHP | 148 Messages

08 déc. 2005, 21:39

Salut !
// Pour envoyer un mail HTML, l'en-tête Content-type doit être défini
     $headers  = 'MIME-Version: 1.0' . "\r\n";
     $headers .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n";
Plus d'infos...

@ +
Et hop !

Mammouth du PHP | 19672 Messages

08 déc. 2005, 21:40

Peut-être en ajoutant un type mime pour l'envoi en html:
//...
        /* Pour envoyer un mail au format HTML, on configure le type MIME. */
        $entetes  = "MIME-Version: 1.0\r\n";
        $entetes .= "Content-type: text/html; charset=iso-8859-1\r\n";
//...
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphanteau du PHP | 23 Messages

07 avr. 2006, 10:12

Salut à tous !
J'ai également ce problème, mais j'utilise bien les bons headers...
La plupart du temps, le mail arrive correctement à destination, à savoir qu'il apparaît correctement en HTML, mais dans certains cas (environ 2% des mails envoyés), il arrive en texte brut :shock: .

J'ai beau retourner le problème dans tous les sens, je ne comprends pas... Les adresses recevant ces mails à problème sont diverses (wanadoo, club-internet...), mais ce n'est pas systématique.

Voici le code que j'utilise pour envoyer le mail :
<?php
require ('../includes/mysql_connect.php');
$retour  = mysql_query ("SELECT * FROM abonnes_newsletter WHERE categorie='" . $_GET['categorie'] . "' AND abonne='oui' ORDER BY mail LIMIT " . ($_GET['start'] * $_GET['limite']) . "," . $_GET['limite']) or die (mysql_error());
mysql_close();

$contenu_mail = file_get_contents ('./txt/newsletter.txt'); // Je vais chercher le texte du mail
$sujet_mail   = file_get_contents ('./txt/newsletter_sujet.txt'); // Idem pour le sujet

while ($donnees = mysql_fetch_array ($retour)) {
  $modele   = file_get_contents ('../newsletter/newsletter.html');
  $message  = str_replace ('##NOM_DEST##', $donnees['prenom'], $modele);
  $message  = str_replace ('##MESSAGE##', utf8_decode ($contenu_mail), $message);
  $message  = stripslashes ($message);
  $message  = str_replace ('##MAIL##', $donnees['mail'], $message);
  $headers  = 'MIME-Version: 1.0' . "\r\n";
  $headers .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n";
  $headers .= 'From: BELLONE <[email protected]>' . "\r\n";
  $to      = ($donnees['nom'] == '') ? $donnees['mail'] : $donnees['prenom'] . ' ' . $donnees['nom'] . ' <' . $donnees['mail'] . '>';
  
  if (!mail ($to, utf8_decode ($sujet_mail), $message, $headers, '[email protected]')) { // Au cas où le mail ne part pas, je consigne les erreurs. Le 5ème paramètre de la fonction mail sert à configurer l'adresse de retour pour les erreurs (genre user unknown)
    $nombre = file_get_contents ('txt/nb_erreurs.txt');
        $nombre++;
        file_put_contents ('txt/nb_erreurs.txt', $nombre);
        
        $log    = file_get_contents ('txt/log_erreurs.txt');
        $log    = $log . $donnees['mail'] . "\n";
        file_put_contents ('txt/log_erreurs.txt', $log);
  }
}

if ( ($_GET['start'] + 1) != $_GET['reload']) { // On gère le rafraîchissement de la page pour l'envoi de mails par paquets
  header ('Location: newsletter_attente.php5?start=' . ($_GET['start']+1) . '&limite=' . $_GET['limite'] . '&total=' . $_GET['total'] . '&reload=' . $_GET['reload'] . '&categorie=' . $_GET['categorie']);
} else {
  $message = 'La newsletter a bien été envoyée !';
  $message = urlencode($message);
  header ('Location: index.php5?message=' . $message);
}
?>
Si vous avez une idée... :)

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

07 avr. 2006, 10:17

Dans la mesure ou cela fonctionne dans 98% des cas, pour les 2% restant tu devrais déjà vérifier (si cela est possible) si ce n'est pas juste leur logiciel de courrier qui ne serait pas tout simplement configuré pour reçevoir les mail en texte brut :)

Dans les Outils ou les Options, tu dois pouvoir paramétrer le format de réception des mails.. Sachant que sur la plupart des newsletter aujourd'hui, tu as toujours un lien du genre "si ce mail ne s'affiche pas correctement, cliquez ici pour accéder au site..." pour palier à ce problème éventuel

Eléphanteau du PHP | 23 Messages

07 avr. 2006, 10:20

Merci de ta réponse, Ryle

Bien évidemment, ce n'est pas possible de vérifier... Je pense également que cela vient d'une histoire de configuration, mais je me demandais si cela pouvait venir de mon code...

Est-il possible d'envoyer le mail à la fois en HTML et en texte brut? De manière à être compatible avec tout le monde? Si oui comment