Envoi de newsletter simple et professionnel (approuvé)

Contenu du snippet

Permet la création, l'aperçu, la modification et l'envoi de newsletter au format HTML. Statistiques sur la fonction mail après l'envoi (inutile ;) mais bon...)

Note : Une newsletter, pour économiser les ressources serveur, doit de préférence être envoyée la nuit pendant les creux d'utilisation serveur.

Source / Exemple :


<?php
$courriels="";

	$newsletter=isset($_POST['newsletter'])?$_POST['newsletter']:"";
	$sujet=isset($_POST['sujet'])?$_POST['sujet']:"Newsletter";
	$send=isset($_POST['send'])?$_POST['send']:"";
	connexion();
	$query="SELECT * FROM `newsletter`";
	$result=mysql_query($query);
	for($i=0;$i<mysql_num_rows($result);$i++){
		$id=mysql_result($result,$i,"id");	
		$courriel=mysql_result($result,$i,"courriel");
		$date=mysql_result($result,$i,"date");
		
		$courriels.=$courriel.";";
	
	}
	
	if($send=="apercu"){
		?>
		<p>Aperçu de la newsletter :</p>
		<div style="display: block; width: 100%; background-color: white; color: black; border: 1px red dashed; ">
		<?php echo stripslashes($newsletter); ?>
		</div>
		<form method="post" action="newsletter.php" name="formapercu">
		<p>Aperçu du code généré pour la newsletter (non modifiable ici, cocher la case "modifier" plus bas...) :</p>
		<textarea readonly="readonly" name="newsletter" style="width: 100%; height: 200px;"><?php echo stripslashes($newsletter); ?></textarea>
		<p>Vérifiez le titre pour la newsletter avant l'envoi</p>
		<input type="text" name="sujet" value="<?php echo $sujet; ?>" style="width: 100%;" />
		<p>Actions possibles :</p>
		<div style="position: relative; float: left;"><input type="radio" name="send" value="modif" onClick="document.formapercu.valuesubmit.value='Modifier la newsletter';"/>Modifier<br />
		<input type="radio" name="send" value="send"   onClick="document.formapercu.valuesubmit.value='Envoyer la newsletter';" checked="checked"/>Envoyer</div>
		<div style="position: relative; top: 6pt; float: right;"><input type="submit" name="valuesubmit" value="Envoyer la newsletter"/></div></form>
		<?php
	}
	
	
	elseif($send=="send"){
		?><script language="JavaScript" type="text/Javascript">alert('Attention, la newsletter est en cours d\'envoi. Ceci peut prendre un certain temps suivant le nombre de personnes inscrites.');</script>
		<p>Envoi en cours... Veuillez patienter</p>
		<?php
		
		connexion();
		$query="SELECT * FROM `newsletter`";
		$result=mysql_query($query);
		$succes_nb=0;
		$succes="";
		$nope_nb=0;
		$nope="";
			
			/* destinataire = $courriel */
			/* sujet = $sujet */
			/* message = $newsletter */
			/* Pour envoyer du mail au format HTML */
			$headers  = "MIME-Version: 1.0\n";
			$headers .= "Content-type: text/html\n charset=iso-8859-1\n";
			
			/* D'autres en-têtes : errors, From cc's, bcc's, etc */
			$headers .= "From: Votre nom <reply@domaine.com>\n";
			//$headers .= "Cc: societe@domaine.com\n";
			//$headers .= "Bcc: societe@domaine.com\n";
		
		for($i=0;$i<mysql_num_rows($result);$i++){
			$id=mysql_result($result,$i,"id");	
			$courriel=mysql_result($result,$i,"courriel");
			$date=mysql_result($result,$i,"date");
			
			/* et hop, à la poste */
			if(@mail($courriel, $sujet, $newsletter, $headers)){
			$succes .= $courriel."<br />";
			$succes_nb++;	
			}
			else{
			$nope .= $courriel."<br />";
			$nope_nb++;
			}

			
		}
		$succes_pourc= ($succes_nb / $i ) * 100;
		$echec_pourc= ($nope_nb / $i ) * 100;
		echo "<p>Fin du processus, statistiques sur cet envoi</p>";
		echo "Succès pour $succes_nb mails ( sur $i soit $succes_pourc% ) :<br />$succes";
		echo "<br /><br />Echecs pour $nope_nb mails ( sur $i soit $echec_pourc% ) :<br />$nope";
	}
	
	
	elseif($send=="modif"){
		?>
		<p>Préparer une newsletter :</p>
		<div class="formulaire">
		<form action="newsletter.php" method="post">
		<p>Titre de la newsletter</p>
		<input type="text" name="sujet" value="<?php echo $sujet; ?>" style="width: 100%;" />
		<p>Contenu de la newsletter</p>
		<textarea name="newsletter" style="width: 100%; height: 200px;"><?php echo stripslashes($newsletter); ?></textarea><br />
		<input type="hidden" name="send" value="apercu" />
		<p>Terminer</p>
		<input type="submit" value="Envoyer cette newsletter" />
		</form>
		</div>	
		<?php
	}
	
	
	else{	?>
		<p>Préparer une newsletter :</p>
		<div class="formulaire">
		<form action="newsletter.php" method="post">
		<p>Titre de la newsletter</p>
		<input type="text" name="sujet" value="Newsletter" style="width: 100%;" />
		<p>Contenu de la newsletter</p>
		<textarea name="newsletter" style="width: 100%; height: 200px;"></textarea><br />
		<input type="hidden" name="send" value="apercu" />
		<p>Terminer</p>
		<input type="submit" value="Envoyer cette newsletter" />
		</form>
		</div>
		<?php }

Conclusion :


Créer une table `newsletter` avec les entrées id (int 10) courriel (varchar 255) et date (varchar 10)

Vous pouvez développer à côté le module d'inscription à la newsletter (relativement simple ;) )

remplacez connexion(); par vos paramètre de connexion, c'est à dire
mysql_connect($server,$user,$mdp);
mysql_select_db($db);

Tout est prêt ;)

la combinaison avec le script HTMLarea, téléchargeable ici, rend plutôt pas mal :
http://www.interactivetools.com/products/htmlarea/

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.