Mis à jour le mercredi 30 octobre 2013
  • Facile
Connectez-vous ou inscrivez-vous gratuitement pour bénéficier de toutes les fonctionnalités de ce cours !

Introduction du cours

C'est inévitable, vous avez tous déjà eu l'envie de créer un système de newsletter. :p

C'est quoi, un système de newsletter ?

Ah ! Comme son nom l'indique, news : nouveautés, et letter : lettre. Ces mots proviennent de l'anglais. C'est un système permettant d'envoyer à une liste de membres les nouveautés de votre site. Voilà ! :D
Bon, avant de commencer la lecture de ce tutoriel, je vous conseille d'abord d'apprendre le PHP grâce au tuto de M@teo21.
On va alors pouvoir commencer ! ;)

Présentation

Alors, pour réaliser un système de newsletter, on va avoir besoin de plusieurs choses :

  • la fonction mail (elle est indispensable pour l'envoi) ;

  • une base de données MySQL ;

  • des cookies ;

  • un fichier .htaccess.

Bon, on va pouvoir commencer.
Votre système se décomposera en plusieurs pages.
Il y aura 2 répertoires :

  • le répertoire public, accessible à tout le monde ;

  • le répertoire privé, protégé par un mot de passe.

Voici ce que contient le répertoire public :

Image utilisateur

(Si si, les couleurs sont superbes ! :p )
Et voici ce que contient le répertoire privé (que vous devez protéger avec un fichier .htaccess) :

Image utilisateur

Je vais vous expliquer le fonctionnement ultra simple de ce système.
La personne va sur la page index.php. Là, l'utilisateur entre son adresse e-mail et choisit s'il veut s'inscrire ou se désinscrire. Ensuite, il reçoit un mail, avec un lien vers la page inscription.php ou desinscription.php, pour vérifier que l'adresse entrée était bien la sienne.
Sur la page inscription.php ou desinscription.php, il entre de nouveau son adresse e-mail pour vérifier ; si c'est la même, il est ajouté à la liste des inscrits ou en est retiré.

La base de données, elle, se compose de cette façon :

Image utilisateur

Le champ email contient l'adresse e-mail de la personne. Quand elle se désinscrit, l'adresse est supprimée de la BDD.

Si vous avez tout compris, on va pouvoir passer à la suite. :soleil:

Les différents fichiers

index.php

Nous allons commencer avec la page index.php, le fichier où l'on rentrera son adresse e-mail et qui enverra le mail de validation.
La première chose que l'on va étudier est le fonctionnement de ce fichier.

Une fois qu'on a rempli les champs, on vérifie si l'on souhaite s'inscrire. Puis on envoie un e-mail contenant le lien vers inscription.php, avec en variable l'adresse e-mail. On fait de même si l'on veut se désinscrire, mais cette fois-ci le lien pointera vers desinscription.php. :p

Si l'on détaille tout ça, on aura…

En premier, on va vérifier si les champs ont bien été remplis.

<?php
if(isset($_GET['email'])) // On vérifie que la variable $_GET['email'] existe.
    {
 
        if( !empty($_POST['email']) AND $_GET['email']==1 AND isset($_POST['new'])) /* On vérifie que la variable $_POST['email'] contient bien quelque chose, que la variable $_GET['email'] est égale à 1 et que la variable $_POST['new'] existe. */
        {
?>

On vérifie ensuite si $_POST['email'] contient bien une adresse, avec une regex.

<?php
if (preg_match("#^[a-z0-9._-]+@[a-z0-9._-]{2,}\.[a-z]{2,4}$#", $_POST['email']))
        {
?>

Ensuite, on va regarder si l'on veut s'inscrire.

<?php
if($_POST['new']==0) // Si la variable $_POST['new'] est égale à 0, cela signifie qu'on veut s'inscrire.
            {
?>

Puis, on envoie le mail avec le lien pour valider l'inscription.

<?php
//On définit les paramètres de l'e-mail.
            $email = $_POST['email'];
            $message = 'Pour valider votre inscription à la newsletter de MonSite.fr, <a href="http://www.monsite.fr/inscription.php?tru=1&amp;email='.$email.'">cliquez ici</a>.';
 
            $destinataire = $email;
            $objet = "Inscription à la newsletter de MonSite.fr" ;
 
            $headers  = 'MIME-Version: 1.0' . "\r\n";
            $headers .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n";
            $headers .= 'From: monsite@monsite.fr' . "\r\n";
                if ( mail($destinataire, $objet, $message, $headers) ) // On envoie l'e-mail.
                {
 
                echo "Pour valider votre inscription, veuillez cliquer sur le lien dans l'e-mail que nous venons de vous envoyer.";
                }
                else
                {
                echo "Il y a eu une erreur lors de l'envoi du mail pour votre inscription.";
                }
?>

Ensuite, si $_POST['new'] ne vaut pas 0, cela signifie que l'on veut se désinscrire.

<?php
elseif($_POST['new']==1) // Si la variable $_POST['new'] est égale à 1, cela signifie qu'on veut se désinscrire.
            {
?>

Et on envoie le mail avec le lien pour valider la désinscription.

<?php
// On définit les paramètres de l'e-mail.
            $email = $_POST['email'];
            $message = 'Pour valider votre désinscription de la newsletter de MonSite.fr, <a href="http://www.monsite.fr/desinscription.php?tru=1&amp;email='.$email.'">cliquez ici</a>.';
 
            $destinataire = $email;
            $objet = "Désinscription de la newsletter de MonSite.fr" ;
 
            $headers  = 'MIME-Version: 1.0' . "\r\n";
            $headers .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n";
            $headers .= 'From: monsite@monsite.fr' . "\r\n";
                if ( mail($destinataire, $objet, $message, $headers) ) 
                {
 
                echo "Pour valider votre désinscription, veuillez cliquer sur le lien dans l'e-mail que nous venons de vous envoyer.";
                }

Sinon, si ce qui a été rentré n'est pas une adresse e-mail, on le signale.

<?php
        else // Si on n'a pas rentré d'adresse e-mail.
        {
        echo 'Vous n\'avez pas entré une adresse e-mail valide ! Veuillez recommencer !';
        }
?>

Et sinon, si les champs ne sont pas remplis, on affiche le formulaire.

<?php
else
    {
?>
La newsletter :
<form method="post" action="index.php?email=1">
Adresse e-mail : <input type="text" name="email" size="25" /><br />
<input type="radio" name="new" value="0" />S'inscrire
<input type="radio" name="new" value="1" />Se désinscrire<br />
<input type="submit" value="Envoyer" name="submit" /> <input type="reset" name="reset" value="Effacer" />
</form>
<?php
    }
?>
</body>
</html>

Et voici (enfin ^^ ) le fichier complet :

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" >
<head>
    <title>La newsletter de MonSite.fr</title>
</head>
<body>
 <?php
    if(isset($_GET['email'])) // On vérifie que la variable $_GET['email'] existe.
    {
 
        if( !empty($_POST['email']) AND $_GET['email']==1 AND isset($_POST['new'])) /* On vérifie que la variable $_POST['email'] contient bien quelque chose, que la variable $_GET['email'] est égale à 1 et que la variable $_POST['new'] existe. */
        {
        if (preg_match("#^[a-z0-9._-]+@[a-z0-9._-]{2,}\.[a-z]{2,4}$#", $_POST['email'])) // On vérifie qu'on a bien rentré une adresse e-mail valide.
        {
 
            if($_POST['new']==0) // Si la variable $_POST['new'] est égale à 0, cela signifie que l'on veut s'inscrire.
            {
 
            // On définit les paramètres de l'e-mail.
            $email = $_POST['email'];
            $message = 'Pour valider votre inscription à la newsletter de MonSite.fr, <a href="http://www.monsite.fr/inscription.php?tru=1&amp;email='.$email.'">cliquez ici</a>.';
 
            $destinataire = $email;
            $objet = "Inscription à la newsletter de MonSite.fr" ;
 
            $headers  = 'MIME-Version: 1.0' . "\r\n";
            $headers .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n";
            $headers .= 'From: monsite@monsite.fr' . "\r\n";
                if ( mail($destinataire, $objet, $message, $headers) ) // On envoie l'e-mail.
                {
 
                echo "Pour valider votre inscription, veuillez cliquer sur le lien dans l'e-mail que nous venons de vous envoyer.";
                }
                else
                {
                echo "Il y a eu une erreur lors de l'envoi du mail pour votre inscription.";
                }
            }
            elseif($_POST['new']==1) // Si la variable $_POST['new'] est égale à 1, cela signifie que l'on veut se désinscrire.
            {
 
            // On définit les paramètres de l'e-mail.
            $email = $_POST['email'];
            $message = 'Pour valider votre désinscription de la newsletter de MonSite.fr, <a href="http://www.monsite.fr/desinscription.php?tru=1&amp;email='.$email.'">cliquez ici</a>.';
 
            $destinataire = $email;
            $objet = "Désinscription de la newsletter de MonSite.fr" ;
 
            $headers  = 'MIME-Version: 1.0' . "\r\n";
            $headers .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n";
            $headers .= 'From: monsite@monsite.fr' . "\r\n";
                if ( mail($destinataire, $objet, $message, $headers) ) 
                {
 
                echo "Pour valider votre désinscription, veuillez cliquer sur le lien dans l'e-mail que nous venons de vous envoyer.";
                }
                else
                {
                echo "Il y a eu une erreur lors de l'envoi du mail pour votre désinscription.";
                }
            }
            else
            {
            echo "Il y a eu une erreur !";
            }
        }
        else
        {
        echo "Vous n\'avez pas entré une adresse e-mail valide ! Veuillez recommencer !";
        }
        }
        else
        {
        echo "Il y a eu une erreur.";
        }
    }
    else // Si les champs n'ont pas été remplis.
    {
?>
La newsletter :
<form method="post" action="index.php?email=1">
Adresse e-mail : <input type="text" name="email" size="25" /><br />
<input type="radio" name="new" value="0" />S''inscrire
<input type="radio" name="new" value="1" />Se désinscrire<br />
<input type="submit" value="Envoyer" name="submit" /> <input type="reset" name="reset" value="Effacer" />
</form>
<?php
    }
?>
</body>
</html>

Voir un exemple
Et maintenant, on peut passer aux autres fichiers. :D

inscription.php et desinscription.php

Alors là, c'est la grosse partie de ce tutoriel. Ce sont les fichiers qui ajoutent les adresses e-mail dans la base de données.

inscription.php

On commence donc par créer un cookie qui contient l'adresse e-mail pour le vérifier par la suite, et ce cookie est créé si $_GET['tru'] est égale à 1 : dans le lien pour l'inscription, il y a cette variable qui signifie que l'on vient de cliquer sur le lien de l'e-mail.

<?php
    if($_GET['tru']==1)
    {
 
    setcookie("email", $_GET['email'], time()+25); // On crée un cookie qui expirera 25 secondes plus tard pour des raisons de sécurité.
    }
?>

Puis on commence la page. Dans l'en-tête, il y a une redirection vers votre page d'accueil. Pour deux raisons : si on tarde à entrer son adresse e-mail ou si on l'a déjà entrée, donc si $_GET['tru'] est égale à 2 (on verra ça après).

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" >
<head>
    <meta http-equiv=Content-Type content="text/html; charset=iso-8859-1">
 
<?php
    if($_GET['tru']==2)
    {
?>
    <meta http-equiv="refresh" content="1; url=http://www.MonSite.fr/" /> <!-- Redirection vers la page d'accueil du site si on a entré son e-mail. -->
 
<?php
    }
    else
    {
?>
 
    <meta http-equiv="refresh" content="25; url=http://www.MonSite.fr/" /> <!-- Redirection vers la page d'accueil du site si on tarde trop à entrer son e-mail. -->
 
<?php
    }
?>
 
    <title>Validation de votre inscription à la newsletter de MonSite.fr</title>
 
</head>

Ensuite, si $_GET['tru'] est égale à 1, on affiche donc le formulaire.

<body>
<p align="center"><font size="5">Validation de votre inscription</font></p>
<?php
    if($_GET['tru']==1) //s Si la variable $_GET['tru'] est égale à 1.
    // On affiche le formulaire.
    {
?>
<font color="red">Attention, vous avez 25 secondes pour remplir le formulaire. Passé ce délai, celui-ci ne sera plus valide.</font>
<form method="post" action="inscription.php?tru=2">
Entrez votre adresse e-mail : <input type="text" name="email" size="25" /><br />
<input type="submit" value="Envoyer" name="submit" /> <input type="reset" name="reset" value="Effacer" />
</form>
<?php
    }

Et sinon, si $_GET['tru'] est égale à 2, cela signifie qu'on a rempli le formulaire, on vérifie que l'email du cookie est identique à l'email entré. Si c'est la cas, on enregistre l'adresse e-mail dans la base de données.

<?php
elseif($_GET['tru']==2) // Sinon, si la variable $_GET['tru'] est égale à 2.
    {
    mysql_connect("localhost", "login", "pass");
    mysql_select_db("db");
    $email_mail = mysql_real_escape_string($_COOKIE['email']);
    $email_entre = mysql_real_escape_string($_POST['email']);
 
        if($email_entre==$email_mail) // Si les deux adresses e-mail sont identiques.
        {
        mysql_query("INSERT INTO newsletter VALUES('" . $email_entre . "')"); // On l'inscrit dans la base de données MySQL.
 
        echo "Vous avez bien été inscrit à la newsletter de MonSite.fr ! Vous allez être redirigé dans 1 seconde.";
 
        }
        else
        {
 
        echo "Vous n'avez pas entré la bonne adresse e-mail !";
 
        }
    }
    else
    {
    echo "Il y a eu une erreur.";
    }
?>
</body>
</html>

Et voici maintenant le code complet de la page inscription.php :

<?php
    if($_GET['tru']==1)
    {
 
    setcookie("email", $_GET['email'], time()+25); // On crée un cookie qui expirera 25 secondes plus tard pour des raisons de sécurité.
    }
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" >
<head>
    <meta http-equiv=Content-Type content="text/html; charset=iso-8859-1">
 
<?php
    if($_GET['tru']==2)
    {
?>
    <meta http-equiv="refresh" content="1; url=http://www.MonSite.fr/" /> <!-- Redirection vers la page d'accueil du site si on a entré son e-mail. -->
 
<?php
    }
    else
    {
?>
 
    <meta http-equiv="refresh" content="25; url=http://www.MonSite.fr/" /> <!-- Redirection vers la page d'accueil du site si on tarde trop à entrer son e-mail. -->
 
<?php
    }
?>
 
    <title>Validation de votre inscription à la newsletter de MonSite.fr</title>
 
</head>
<body>
<p align="center"><font size="5">Validation de votre inscription</font></p>
<?php
    if($_GET['tru']==1) //Si la variable $_GET['tru'] est égale à 1.
    // On affiche le formulaire
    {
?>
<font color="red">Attention, vous avez 25 secondes pour remplir le formulaire. Passé ce délai, celui-ci ne sera plus valide.</font>
<form method="post" action="inscription.php?tru=2">
Entrez votre e-mail : <input type="text" name="email" size="25" /><br />
<input type="submit" value="Envoyer" name="submit" /> <input type="reset" name="reset" value="Effacer" />
</form>
<?php
    }
elseif($_GET['tru']==2) // Sinon, si la variable $_GET['tru'] est égale à 2.
    {
    mysql_connect("localhost", "login", "pass");
    mysql_select_db("db");
    $email_mail = mysql_real_escape_string($_COOKIE['email']);
    $email_entre = mysql_real_escape_string($_POST['email']);
 
        if($email_entre==$email_mail) // Si les deux adresses e-mail sont identiques.
        {
        mysql_query("INSERT INTO newsletter VALUES('" . $email_entre . "')"); // On l'inscrit dans la base de données MySQL.
 
        echo "Vous avez bien été inscrit à la newsletter de MonSite.fr ! Vous allez être redirigé dans 1 seconde.";
 
        }
        else
        {
 
        echo "Vous n'avez pas entré la bonne adresse e-mail !";
 
        }
    }
    else
    {
echo "Il y a eu une erreur.";
    }
?>
</body>
</html>

Pour voir un exemple, vous devez recevoir l'e-mail et cliquer sur le lien.

desinscription.php

desinscription.php fonctionne exactement de la même façon. En voici donc le code source :

<?php
    if($_GET['tru']==1)
    {
 
    setcookie("email", $_GET['email'], time()+25); // On crée un cookie qui expirera 25 secondes plus tard pour des raisons de sécurité.
 
    }
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" >
<head>
    <meta http-equiv=Content-Type content="text/html; charset=iso-8859-1">
<?php
    if($_GET['tru']==2)
    {
?>
 
    <meta http-equiv="refresh" content="1; url=http://www.MonSite.fr/" /> <!-- Redirection vers la page d'accueil du site si on a entré son e-mail. -->
 
<?php
    }
    else
    {
?>
 
    <meta http-equiv="refresh" content="25; url=http://www.MonSite.fr/" /> <!-- Redirection vers la page d'accueil du site si on tarde trop à entrer son e-mail. -->
 
<?php
    }
?>
    <title>Validation de votre désinscription de la newsletter de MonSite.fr</title>
</head>
<body>
<p align="center"><font size="5">Validation de votre désinscription</font></p>
 
<?php
    if($_GET['tru']==1) //si la variable $_GET['tru'] est égale à 1
    // On affiche le formulaire.
    {
?>
<font color="red">Attention, vous avez 25 secondes pour remplir le formulaire. Passé ce délai, celui-ci ne sera plus valide.</font>
<form method="post" action="desinscription.php?tru=2">
Entrez votre adresse e-mail : <input type="text" name="email" size="25" /><br />
<input type="submit" value="Envoyer" name="submit" /> <input type="reset" name="reset" value="Effacer" />
</form>
<?php
    }
    elseif($_GET['tru']==2) // Sinon, si la variable $_GET['tru'] est égale à 2.
    {
    mysql_connect("localhost", "login", "pass");
    mysql_select_db("db");
    $email_mail = mysql_real_escape_string($_COOKIE['email']);
    $email_entre = mysql_real_escape_string($_POST['email']);
 
        if($email_entre==$email_mail) // Si les deux adresses e-mail sont identiques.
        {
        mysql_query("DELETE FROM newsletter WHERE email='" . $email_entre ."'"); //On supprime l'adresse de la BDD.
 
        echo "Vous avez bien été désinscrit de la newsletter de MonSite.fr ! Vous allez être redirigé dans 1 seconde.";
 
        }
        else
        {
        echo "Vous n'avez pas entré la bonne adresse e-mail !!";
        }
    }
    else
    {
    echo "Il y a eu une erreur.";
    }
?>
</body>
</html>

Pour voir un exemple, vous devez recevoir l'e-mail et cliquer sur le lien.

Eh voilà. :p

newsletter.php

Ah, enfin. C'est le fichier qui envoie le mail.
Son fonctionnement est ultra simple. On récupère les dernières news et on les ajoute au message.
Les news sont récupérées dans une table du nom de news. Sa structure est la même que celle utilisée dans le tuto de M@teo21. Si vous avez suivi son tuto, vous pouvez donc ajouter ce système de newsletter ! :) Sinon, consultez le lien précédent, et créez une table selon la même structure que dans le tuto. :)

Pour les destinataires, on sépare par une virgule :

<?php
// On définit la liste des inscrits.
$liste = 'monsite@monsite.fr';
    while ($donnees = mysql_fetch_assoc($liste_vrac))
    {
    $liste .= ','; //On sépare les adresses par une virgule.
    $liste .= $donnees['email'];
    }
?>

Les inscrits sont en copie invisible (le destinataire étant l'admin) afin qu'ils ne puissent pas voir pas les adresses des autres.

<?php
$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 affiche aussi à la fin la liste des inscrits (rien de compliqué, on récupère les données de la BDD et on fait une boucle avec un array).
On ajoute également la date au sujet du message.

<?php
$date = date("d/m/Y");
 
$objet = "Newsletter de MonSite.fr du $date"; // On définit l'objet qui contient la date.
?>

Ce qui nous donne finalement :

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" >
<head>
    <title>Envoi de la newsletter</title>
    <style type="text/css">
            h2, th, td
            {
                text-align:center;
            }
            table
            {
                border-collapse:collapse;
                border:2px solid white;
                margin:auto;
            }
            th, td
            {
                border:1px solid black;
            }
        </style>
</head>
<body>
<p align=center><font size="6"><font color="red">Envoi de la newsletter</font></font></p>
 
<?php
// On se connecte.
mysql_connect("localhost", "login", "pass");
mysql_select_db("db");
 
// On récupère les 5 dernières news.
$news = mysql_query('SELECT contenu,timestamp FROM news ORDER BY id DESC LIMIT 0, 5');
 
$fichier_message = '<html>
<head>
    <title>Newsletter de MonSite.fr</title>
</head>
<body bgcolor="black">
<font face="verdana"><font color="white"><font size="5"><p align="center"><font color="red"><u>Balzac61</u></font></p></font>
<font size="3">
<p align="left">Voici les dernières news de MonSite.fr :<br /><ul>'; //On définit le message.
 
    while($donnee = mysql_fetch_assoc($news)) 
    {
    $fichier_message .= '<li>'.$donnee["contenu"].'(le'.date("D, d M Y H:i:s",$donnee["timestamp"]).')</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 = 'monsite@monsite.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 MonSite.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: monsite@monsite.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 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>
</body>
</html>

Eh voilà. On a vu tous les fichiers indispensables. :D

Améliorations

Bon, voici les améliorations possibles :

  • comme d'habitude, le style est minimaliste. On peut sans problème ajouter une feuille de style ;

  • on peut ajouter un lien de désinscription dans l'e-mail ;

  • on peut aussi afficher les dernières modifications du site ;

  • on peut ajouter du BBCode dans les messages ;

  • vous pouvez aussi ajouter un textarea pour ajouter à la newsletter un message en plus des news.

    Il faudrait tout d'abord ajouter une condition pour que le mail ne s'envoie qu'une fois le formulaire validé :

    <?php
    if(isset($_POST['message'])) //On a tapé le message.
    {
    ?>
    

    Puis, il faut ajouter ce qui a été tapé au message envoyé ;) :

    <?php
    $fichier_message = '<html>
    <head>
       <title>Newsletter de MonSite.fr</title>
    </head>
    <body bgcolor="black">
    <font face="verdana"><font color="white"><font size="5"><p align="center"><font color="red"><u>MonSite</u></font></p></font>
    <font size="3">
    <p align="left">' . $_POST['message'] . '<br /><br />Voici les dernières news de MonSite.fr :<br /><ul>'; //On définit le message.
    ?>
    

    Voilà pour le PHP. ;)

    Sinon, il faut bien évidemment ajouter le formulaire html : ^^

    <h3>Message ajouté à la newsletter</h3>
    <form method="post" action="newsletter.php">
    <textarea cols="30" rows="10" name="message"></textarea>
    <input type="submit" value="Envoyer la newsletter" />
    </form>
    

    Voilà, le fichier modifié :D (les lignes rajoutées sont colorées) :

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" >
    <head>
        <title>Envoi de la newsletter</title>
        <style type="text/css">
                h2, th, td
                {
                    text-align:center;
                }
                table
                {
                    border-collapse:collapse;
                    border:2px solid white;
                    margin:auto;
                }
                th, td
                {
                    border:1px solid black;
                }
            </style>
    </head>
    <body>
    <p align=center><font size="6"><font color="red">Envoi de la newsletter</font></font></p>
     
    <?php
    // On se connecte.
    mysql_connect("localhost", "login", "pass");
    mysql_select_db("db");
    if(isset($_POST['message'])) //On a tapé le message.
    { 
    // On récupère les 5 dernières news
    $news = mysql_query('SELECT contenu,timestamp FROM news ORDER BY id DESC LIMIT 0, 5');
     
    $fichier_message = '<html>
    <head>
       <title>Newsletter de MonSite.fr</title>
    </head>
    <body bgcolor="black">
    <font face="verdana"><font color="white"><font size="5"><p align="center"><font color="red"><u>Balzac61</u></font></p></font>
    <font size="3">' . $_POST['message'] . '<br /><br />
    <p align="left">Voici les dernières news de MonSite.fr :<br /><ul>'; //On définit le message.
     
        while($donnee = mysql_fetch_assoc($news)) 
        {
        $fichier_message .= '<li>'.$donnee["contenu"].'(le'.date("D, d M Y H:i:s",$donnee["timestamp"]).')</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 = 'monsite@monsite.fr';
        while ($donnees = mysql_fetch_assoc($liste_vrac))
        {
        $liste .= ','; //On sépare les adresses par une virgule.
        $liste .= $donnees['email'];
        }
    $message = $fichier_message;
    $destinataire = 'monsite@monsite.fr'; //On adresse une copie a l'administrateur.
     
    $date = date("d/m/Y");
     
    $objet = "Newsletter de MonSite.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: monsite@monsite.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 lors de l'envoi de la newsletter.
    <?php
        }
    } //Fin de la condition de validité du formulaire.
    ?>
    <br />
    <h3>Message ajouté à la newsletter</h3>
    <form method="post" action="newsletter.php">
    <textarea cols="30" rows="10" name="message"></textarea>
    <input type="submit" value="Envoyer la newsletter" />
    </form>
    <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>
    </body>
    </html>
    

    Voilà, vous pouvez maintenant ajouter un message à vos newsletters en plus des news ! :soleil:

Mais je suis sûr que vous pouvez trouver plein d'autres améliorations. :D

N'hésitez pas à m'envoyer un MP si vous en trouvez d'autres ! :p

Bon, ben voilà. J'espère que ce tuto vous a rendu service et que vous allez créer un système de newsletter.
Je ne peux pas mettre d'exemple pour newsletter.php parce que sinon, cela enverrait un mail à plein de gens qui ne veulent pas le recevoir.
À bientôt ! :) Et merci d'avoir lu ce tutoriel jusqu'au bout ! :p

Exemple de certificat de réussite
Exemple de certificat de réussite