Envoi de newsletter simple et professionnel (approuvé)

Soyez le premier à donner votre avis sur cette source.

Snippet vu 30 798 fois - Téléchargée 28 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

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
30
Date d'inscription
samedi 1 février 2003
Statut
Membre
Dernière intervention
9 octobre 2007

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

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

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

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.