Newsletter

Avant de concevoir une newsletter, il convient de maitriser la fonction mail(). Quelques rappels :

Envoi d'un email en texte brut

<!DOCTYPE html>
<html>

<head>
    <meta charset="utf-8">
</head>

<body>
    <h1>Envoi d'un email en texte brut</h1>
    <p>
    <?php
    $message = 'Madame, Monsieur,

    Voici un message en texte brut.

    Cordialement,
    Jules';

    $retour = mail('destinataire@free.fr', 'Email en texte brut', $message, 'From:expediteur@free.fr');
    if ($retour)
        echo 'L'email en texte brut a bien été envoyé.';
    ?>
    </p>
</body>

</html>

Notez que les retours à la ligne du message seront pris en compte dans l'email expédié, ce qui est très pratique.

Envoi d'un email au format HTML

Pour envoyer un email au format HTML, il faut mettre l'entête de l'email au format MIME (Multipurpose Internet Mail Extensions) qui permet à l'email de gérer des codages plus complexe que le basique ASCII.
Attention : les guillemets doubles autour des "\r\n" sont indispensables. Il permettent de générer un caractère de retour à la ligne dans l'entête de l'email.

<!DOCTYPE html>
<html>

<head>
    <meta charset="utf-8">
</head>

<body>
    <h1>Envoi d'un email en HTML</h1>
    <p>
    <?php
    $entete  = 'MIME-Version: 1.0' . "\r\n";
    $entete .= 'Content-type: text/html; charset=utf-8' . "\r\n";
    $entete .= 'From: Expéditeur <expediteur@free.fr>' . "\r\n";

    $message = '<h1>Les livres sont arrivés</h1>
    <p>Nouvel arrivage de <strong>livres</strong> dans votre librairie préférée.</p>
    <img src="https://lesdocs.fr/livres.png">';

    $retour = mail('destinataire@free.fr', 'Email en HTML', $message, $entete);
    if ($retour)
        echo 'L'email en HTML a bien été envoyé.';
    ?>
    </p>
</body>

</html>

Newsletter élaborée

Pour commencer, nous allons créer une table contenant une liste d'emails. Un seul champ peut suffire et vous pouvez définir l'email comme clef primaire du fait de son caractère unique.

newsletter

Dans le code ci-dessous, nous allons lire et stocker une lettre au format HTML dans une variable, puis nous allons l'expédier à une liste d'emails situés dans une table MySQL.

La lettre à expédier au format HTML :

lettre.html

<!DOCTYPE html>
<html>

<head>
    <meta charset="utf-8">
    <title>Newsletter</title>
</head>

<body>
    <h1>Les livres sont arrivés</h1>
    <p>Nouvel arrivage de <strong>livres</strong> dans votre librairie préférée.</p>
    <img src="https://lesdocs.fr/livres.png">
</body>

</html>

Il suffira de lancer la page ci-dessous pour expédier la lettre à tous les abonnés.

newsletter.php

<!DOCTYPE html>
<html>

<head>
    <meta charset="utf-8">
    <title>Newsletter HTML</title>
</head>

<body>
    <h1>Envoi de la newsletter</h1>
    <p>La newsletter a été envoyée au emails suivants :</p>
    <p>
    <?php
    $entete  = 'MIME-Version: 1.0' . "\r\n";
    $entete .= 'Content-type: text/html; charset=utf-8' . "\r\n";
    $entete .= 'From: Jules <jules@free.fr>' . "\r\n";

    $message = file_get_contents('lettre.html');

    $mysqli = new mysqli('localhost', 'root', 'root', 'essai');
    $sql = 'SELECT emails FROM newsletter';
    $resultat = $mysqli -> query($sql);
    while ($ligne = $resultat -> fetch_assoc()) {
        $retour = mail($ligne['emails'], 'Newsletter', $message, $entete);
        if ($retour)
            echo $ligne['emails'] . '<br>';
    }
    ?>
    </p>
</body>

</html>

Voici quelques règles d'intégrations pour l'email : http://email-a-table.fr/ressources-techniques/regles-dintegration

Articles connexes

Les sessions Les sessions permettent de passer des variables de pages en pages, ou de conserver certaines informations pendant la durée d'une visite sur un site. Fonctionnement Une sessi...
Tableau associatif $_GET Le tableau $_GET permet de transmettre des valeurs de variables vers une autre page en passant par la barre d'adresse du navigateur. Intérêt de la méthode GET L'in...
Lire les données d'un formulaire HTML avec PHP Exemple simple Quand un internaute saisit des informations dans un formulaire, celles-ci sont facilement récupérables dans une variable PHP, grâce au placement d'attributs name...
Alimenter une table MySQL via un formulaire HTML Voici le formulaire HTML permettant d'ajouter un enregistrement dans notre table carnet. ajouter.html &l...
Lire les données d’un formulaire sur plusieurs pag... En cliquant sur un bouton de formulaire, la variable est conservée sur la prochaine page grâce à la méthode POST. En revanche, la variable est oubliée si on enchaîne vers une autr...