8795 sujets

Développement web côté serveur, CMS

Bonjour, je mets en place actuellement sur mon site un système de newsletter.
Mais je rencontre un problême lors de l'envoi le mail. Le mail s'envoie mais il est illisible, car on voit toutes les balises html. Et tout est écrit avec la même police / taille , etc.

Voici ma page newsletter.php :

<p align=center><font size="6"><font color="red">Envoie de la newsletter</font></font></p>
 
<?php
// On se connecte
include ('connexion_bdd.php');
 
// On récupère les 5 dernières news
$news = mysql_query('SELECT contenu,date FROM news ORDER BY id DESC LIMIT 0, 5');
 
$fichier_message = '<html>
<head>
    <title>Newsletter de projets-biterrois.fr</title>
</head>
<body bgcolor="black">

<font size="3">
<p align="left">Voici les dernières news de projets-biterrois.fr :<br /><ul>'; //on définit le message
 
    while($donnee = mysql_fetch_assoc($news)) 
    {
    $fichier_message .= '<li>'.$donnee["contenu"].'(le '.date("d M Y H:i:s",$donnee["date"]).')</li>'; //on ajoute les news au message
    }
 
$fichier_message .= '</ul></body>
</html>'; //on termine le message
 
 
//on récupère de la table newsletter les personnes inscrites
$liste_vrac = mysql_query("SELECT email FROM newsletter");
 
//on définit la liste des inscrits
$liste = 'newsletter@projets-biterrois.fr';
    while ($donnees = mysql_fetch_assoc($liste_vrac))
    {
    $liste .= ','; //on sépare les adresses par une virgule
    $liste .= $donnees['email'];
    }
$message = $fichier_message;
$destinataire = $liste; 
 
$date = date("d/m/Y");
 
$objet = "Newsletter de projets-biterrois.fr du $date"; //on définit l'objet qui contient la date
 
//on définit le reste des paramètres
$headers  = 'MIME-Version: 1.0' . '\r\n';
$headers .= 'Content-type: text/html; charset=iso-8859-1' . '\r\n';
$headers .= 'From: newsletter@projets-biterrois.fr' . '\r\n'; //on définit l'expéditeur
$headers .= 'Bcc:' . $liste . '' . '\r\n'; //on définit les destinataires en copie cachée pour qu'ils ne puissent pas voir les adresses des autres inscrits
 
    //on envoie l'e-mail
    if ( mail($destinataire, $objet, $fichier_message, $headers) ) 
    {
?>
Envoi de la newsletter réussi.
<?php
    }
    else
    {
?>
Échec de lors de l'envoi de la newsletter.
<?php
    }
?>
<br /><br /><u>Liste des inscrits :</u><br />
<table>
<tr>
<th>e-mail</th>
</tr>
<?php
 
$liste_inscrits_vrac = mysql_query("SELECT email FROM newsletter"); //on récupère la table newsletter en vrac
    while ($donnees = mysql_fetch_assoc($liste_inscrits_vrac))
    {
?>
 
<tr>
<td><?php echo ($donnees['email']); ?></td>
</tr>
 
<?php
    }
?>
</table>


Merci pour votre aide. Smiley cligne
Modifié par Heyoan (09 Mar 2010 - 13:03)
Je l'avais envoyé entière la page mais ça bug. Smiley sweatdrop

EDIT : Après un bug corrigé, la page de code est visible sur mon premier post. Smiley biggrin
Modifié par freakish (09 Mar 2010 - 13:10)
Hello freakish et bienvenue Smiley smile ,

En tant que modérateur, je me dois de te faire remarquer que tu n'as malheureusement pas respecté l'une des Règles de base du forum qui est d'afficher les codes et exemples proprement à l'aide des boutons [ code]... ici ton code HTML, CSS, PHP, etc.[ /code] (sans espace après le crochet ouvrant).

upload/1-code.gif

Je te remercie par avance de bien vouloir éditer ton message afin de le rendre conforme à cette règle. Smiley cligne

D'ailleurs, je te rappelle que l'Aide (dont le lien est fourni lors de l'inscription) contient des pistes de recherche, des indications sur les règles de vie de la communauté, etc.
freakish a écrit :
Je l'avais envoyé entière la page mais ça bug. Smiley sweatdrop

Je la remet mais hors des balises de code pour voir:
Arf ! J'avais pas vu : il y a effectivement un bug (dans la todo list) quand le code commence par <?php qui se corrige pour l'instant en ne sélectionnant pas code=php mais code=html.
Modifié par Heyoan (09 Mar 2010 - 13:20)
Ton problème vient de la variable $headers : pour que les \r, \n et autres \t soient interprétés ils ne doivent pas être entre quotes ' mais entre guillemets ".

Donc
$headers  = 'MIME-Version: 1.0' . "\r\n"; 
$headers .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n"; 
Au passage du texte noir sur fond noir ça va être dur à lire ! Smiley cligne
Merci , ça fonctionne bien mieux sur la messagerie Windows Live Hotmail.

Mais j'ai une petite question... J'ai essayé d'insérer une image dans le mail, mais elle ne s'affiche pas.

j'ai ajouté ceci :

<head>
    <title>Newsletter de projets-biterrois.fr</title>
	<center><img src="/images/logo_newsletter.jpeg" height="98" width="450"></center><br> 
</head>


Et également j'aimerais pouvoir mettre le titre de la news, mais il doit manquer quelque chose sur cette ligne, car il n'apparait pas dans le mail.

    while($donnee = mysql_fetch_assoc($news)) 
    {
    $fichier_message .= '<li>'.$donnee["titre"].''.$donnee["contenu"].'(le '.date("d M Y H:i:s",$donnee["created_at"]).')</li>'; //on ajoute les news au message
    }
Ben pour l'image tu te doutes bien que la valeur de src doit pointer vers une image en ligne non ? Smiley rolleyes

Quant au titre il faut bien sûr sélectionner le champ dans la requête...
Heyoan a écrit :
Ben pour l'image tu te doutes bien que la valeur de src doit pointer vers une image en ligne non ? Smiley rolleyes


J'ai modifié par le chemin absolu, mais elle ne s'affiche toujours pas. :S

<head>
    <title>Newsletter de projets-biterrois.fr</title>
	<center><img src="http://www.projets-biterrois.fr/images/logo_newsletter.jpg" height="98" width="450"></center><br> 
</head>
<body>


EDIT: après plusieurs essais, elle s'affiche. Smiley confused
Modifié par freakish (09 Mar 2010 - 14:13)