Vous vous apprêtez à lire un tutoriel rédigé par un membre de ce site. Malgré tout le soin que ce membre a pu apporter au tutoriel, nous ne pouvons pas garantir que les informations contenues sur cette page sont exactes à 100%. Merci de garder cela en tête lorsque vous lirez cette page ;o)
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 :
(Si si, les couleurs sont superbes

!)
Et voici ce que contient le répertoire privé (que vous devez
protéger par un fichier .htaccess) :
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 rentre de nouveau son adresse e-mail pour vérifier et si c'est la même, il est ajouté ou supprimé du service.
La base de données, elle, se compose de cette façon :
Le champ
email contient l'adresse e-mail de la personne. Quand elle se désinscrit, cela supprime l'adresse de la BDD.
Si vous avez tout compris, on va pouvoir passer à la suite

.
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 voir 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. Pareil si l'on veut se désinscrire, mais cette fois-ci le lien pointera vers
desinscription.php 
.
Si l'on détaille tout ça, on aura...
En premier, on va vérifier si les champs ont bien été remplis.
Code : PHP1
2
3
4
5
6
7 | <?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 ce que contient
$_POST['email'] est bien une adresse, avec une Regex.
Code : PHP1
2
3
4 | <?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.
Code : PHP1
2
3
4 | <?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.
Code : PHP 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 | <?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&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.
Code : PHP1
2
3
4 | <?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.
Code : PHP 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 | <?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&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.
Code : PHP1
2
3
4
5
6 | <?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.
Code : PHP 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 | <?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 :
Code : PHP 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91 | <!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&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&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>
|
Et maintenant, on peut passer aux autres fichiers

.
inscription.php et desinscription.php
Alors là, c'est la grosse partie de ce tuto. Ce sont les fichiers qui ajoutent l'adresse 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 qu'on vient de cliquer sur le lien de l'e-mail.
Code : PHP1
2
3
4
5
6
7 | <?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 à rentrer son e-mail ou si on l'a déjà rentré, donc si
$_GET['tru'] est égale à 2 (on verra ça après).
Code : PHP 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26 | <!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 égal à 1, on affiche donc le formulaire.
Code : PHP 1
2
3
4
5
6
7
8
9
10
11
12
13
14 | <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 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.
Code : PHP 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29 | <?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 :
Code : PHP 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75 | <?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 validePassé 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 pareil. Voici donc son code source :
Code : PHP 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73 | <?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.
Et voilà

.
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 les sépare par une virgule :
Code : PHP1
2
3
4
5
6
7
8
9 | <?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.
Code : PHP1
2
3 | <?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.
Code : PHP1
2
3
4
5 | <?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 :
Code : PHP 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109 | <!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">Envoie 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 = 'monsite@monsite.fr'; //on adresse une copie à 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 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>
</body>
</html>
|
Et voilà. On a vu tous les fichiers indispensables

.
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 y afficher les dernières modifications de votre site ;
- on peut ajouter du BBCode dans les messages, il y a un tutoriel qui en parle ici.
- Vous pouvez aussi ajouter un
textarea pour ajouter à la newsletter un message en plus des news.
Secret (cliquez pour afficher)
Ceci se passe sur la page newsletter.php.
Il faudrait tout d'abord ajouter une condition pour que le mail ne s'envoie qu'une fois le formulaire envoyé :
Code : PHP28
29
30
31 | <?php
if(isset($_POST['message'])) //On a tapé le message
{
?>
|
Puis, il faut ajouter ce qui a été tapé au message envoyé

:
Code : PHP32
33
34
35
36
37
38
39
40
41 | <?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

:
Code : HTML88
89
90
91
92 | <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é

(les lignes rajoutées sont colorées) :
Code : PHP 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117 | <!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 de 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

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

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

!