---
title: "Formulaire pour l’abonnement / le désabonnement"
date: "2018-04-11"
categories: 
  - "listes-de-diffusion"
---

 Un formulaire web pour l'abonnement/désabonnement à vos listes.

<!--more-->

Pour qu’un utilisateur puisse s’abonner à une liste, la procédure habituelle consiste à envoyer un message au moteur qui gère la liste (sympa@mondomaine.delistes.tld) avec pour sujet :

`subscribe nomdelaliste Prénom Nom` (le « Prénom Nom » est facultatif)

Pour se désabonner, c’est presque la même chose ; le sujet du message doit être :

`unsubscribe nomdelaliste`

Il faut être attentif pour le désabonnement que l’adresse de courriel utilisée soit bien celle qui était abonnée.

Vous pouvez donc créer un lien pour l’abonnement :

`<a href="mailto:sympa@mondomaine.delistes.tld?subject=subscribe nomdelaliste">abonnement</a>`

Ou pour le désabonnement :

`<a href="mailto:sympa@mondomaine.delistes.tld?subject=unsubscribe nomdelaliste">désabonnement</a>`

Mais il peut être pratique aussi d’utiliser un formulaire (qu’on peut mettre en bas d’une page : « abonnement à notre newsletter »). Nous vous proposons une formulaire standard à configurer, que vous pouvez réutiliser, modifier, distribuer à votre guise.

```
<!--
***************************************************************************
Script téléchargé sur https://ouvaton.coop

This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with this program; if not, write to the
Free Software Foundation, Inc.,
59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
***************************************************************************
-->
<!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" lang="fr">

	<head>
		<title>Souscription à la liste de diffusion</title>
		<meta http-equiv="Content-type" content="application/xhtml+xml; charset=UTF-8" />
	</head>

	<body>
		<?
		/* configuration du script */
		$domaine = "votre.domainedeliste.tld" ; // obligatoire : donner le nom du domaine de liste
		$nombrelistes = 1 ; // obligatoire: remplir le nombre de listes définies ci-dessus
		$liste1 = "nomdelaliste" ; // obligatoire : donner au moins 1 nom de liste
		$liste2 = "nomdelaliste" ; // facultatif, si choix entre plusieurs listes
		$liste3 = "nomdelaliste" ; // facultatif, si choix entre plusieurs listes
		$liste4 = "nomdelaliste" ; // facultatif, si choix entre plusieurs listes
		$liste5 = "nomdelaliste" ; // facultatif, si choix entre plusieurs listes
		/* fin de la config */

		// test de sécurité si le formulaire a été envoyé
		if (isset($_POST["send"]) ) {
			$secure = true ;
			$from = $_POST["from"] ;
			//test de l'adresse mail
			if(!preg_match('/^[A-Z0-9._-]+@[A-Z0-9][A-Z0-9.-]{0,61}[A-Z0-9]\.[A-Z.]{2,6}$/i',$from)) {
				echo('Adresse de courriel Invalide <br />') ;
				$secure = false ;
			}
		}

		// Si le formulaire n'a pas été envoyé ou n'est pas secure, on l'affiche
		if (!$secure) { ?>

		<form action="<? $_SERVER["PHP_SELF"] ?>" method="post">
			<fieldset>
				<legend style="margin-bottom: 5px;">S'abonner ou se désabonner (<strong>*</strong> champs obligatoires)</legend>
				<label for="prenom">Prénom :</label> <input id="prenom" name="prenom" type="text" value="<? if ($_POST["prenom"]) echo $_POST["prenom"]?>" /><br />
				<label for="nom">Nom :</label> <input id="nom" name="nom" type="text" value="<? if ($_POST["nom"]) echo $_POST["nom"]?>" /><br /><br />
				<label for="from">Adresse de courriel<strong>*</strong> : </label> <input id="from" name="from" type="text" value="<? if ($_POST["from"]) echo $_POST["from"]?>" /><br /><br />
				Je veux<strong>*</strong> :<br />
				<input name="action" type="radio" value="SUBSCRIBE" /> m'abonner à...<br />
				<input name="action" type="radio" value="UNSUBSCRIBE" /> me désabonner de...<br /><br />
				<label for="liste">... la liste<strong>*</strong> :</label>
					<select id="liste" name="liste">
					<? if ($nombrelistes >= 1) { ?>
					<option value="<? echo $liste1;?>"><? echo $liste1;?></option>
						<? if ($nombrelistes >= 2) { ?>
						<option value="<? echo $liste2;?>"><? echo $liste2;?></option>
						<? if ($nombrelistes >= 3) { ?>
							<option value="<? echo $liste3;?>"><? echo $liste3;?></option>
							<? if ($nombrelistes >= 4) { ?>
								<option value="<? echo $liste4;?>"><? echo $liste4;?></option>
								<? if ($nombrelistes == 5) { ?>
									<option value="<? echo $liste5;?>"><? echo $liste5;?></option>
								<? }
								}
							}
						}
					} ?>
					</select><br /><br />
				<input value="Envoyer" name="send" type="submit" />
			</fieldset>
		</form>

		<?
		} else {
			// Si c'est ok - sécurisé et données
			// on crée le nom complet
			$nomcomplet = $_POST["prenom"] ." " .$_POST["nom"];
			// puis le header du message
			$headers = "From: ".$from."\n" ;
			// puis les arguments
			$to = "sympa@" .$domaine ;
			$subject = "" ;
			if ($_POST["action"] == "SUBSCRIBE") {
				$message = $_POST["action"]." ".$_POST["liste"]." ".$nomcomplet;
			} else {
				$message = $_POST["action"]." ".$_POST["liste"];
			}

			// On envoie le mail :
			if ( mail($to,$subject,$message,$headers) ) {
				// Si le mail a bien été envoyé, message de confirmation
				echo "Votre abonnement/désabonnement a bien été pris en compte.<br />";
			} else {
				// sinon, message d'erreur.
				echo "Votre abonnement/désabonnement n\'a pas pu être envoyé.<br />";
			}
		} ?>
		<p><a href="http://validator.w3.org/check?uri=referer"><img style="border:0px;" src="http://www.w3.org/Icons/valid-xhtml10" alt="Valid XHTML 1.0 Strict" height="31" width="88" /></a></p>
	</body>
</html>
```
