Envoi de newsletter simple et professionnel (approuvé)

Soyez le premier à donner votre avis sur cette source.

Snippet vu 32 722 fois - Téléchargée 30 fois

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

Ajouter un commentaire Commentaires
mdafr Messages postés 1 Date d'inscription lundi 23 décembre 2002 Statut Membre Dernière intervention 5 juillet 2007
5 juil. 2007 à 16:28
Bonjour,
J'essaye d'utiliser cette newsletter, elle marche bien, mais un petit problème se pose, certains mails ne partent pas (la fonction de vérification est utile). Pourtant :
- Les adresses mails sont correctes (c'est vérifié)
- J'ai modifier les valeurs du php.ini (pfpro.defaulttimeout, max_input_time, memory_limit)

Jusqu'à 20 mails ça marche mais après j'ai des mails qui ne sont pas envoyés.
Je ne sais pas comment faire, avez vous eu ce soucis ?
cs_minta Messages postés 31 Date d'inscription samedi 1 février 2003 Statut Membre Dernière intervention 1 mai 2022
31 mai 2007 à 19:33
Bonjour
La remarque de IDEALYO est très pertinente, la première boucle ne sert absolument à rien. Je pense que cela est sans doute dû à la distraction du programmeur. Elle ralentie l'application, elle peut donc à mon sens être supprimée.
jeanlo73 Messages postés 2 Date d'inscription jeudi 31 mai 2007 Statut Membre Dernière intervention 31 mai 2007
31 mai 2007 à 18:34
bonjour

Peut-on vérifier si quelqu'un à lue la newslettre.

Merci
idealyo Messages postés 44 Date d'inscription mercredi 16 juillet 2003 Statut Membre Dernière intervention 19 août 2006
29 mai 2007 à 09:19
je ne comprends pas pourquoi au départ de ton script tu concatenes les emails dans couriels, pour ensuite au moment de les envoyer ne pas te servir de ta variable couriels et envoyer les mails 1 à 1...

A quoi sert donc ton premier tour de boucle ?

++
stepibou Messages postés 112 Date d'inscription jeudi 11 mars 2004 Statut Membre Dernière intervention 11 octobre 2006
28 janv. 2005 à 19:48
merci pour ta source,

j'ai utilisé ta source, (si ca ne te dérange pas),
modifier pour une personnalisation de l'email,
et l'inserer dans ma source de newsletter :

http://www.phpcs.com/code.aspx?id=28192

si t'as une suggestion.

a+

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.