Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

ENVOI DE NEWSLETTER SIMPLE ET PROFESSIONNEL (APPROUVÉ)


Information sur la source

Catégorie :E-Mail / Messagerie Niveau : Débutant Date de création : 01/05/2004 Date de mise à jour : 05/05/2004 13:25:02 Vu : 19 806

Note :
9,17 / 10 - par 12 personnes
9,17 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

Commentaire sur cette source (15)
Ajouter un commentaire et/ou une note

Description

Cliquez pour voir la capture en taille normale
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

  • <?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 }
<?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/
 

Commentaires et avis

signaler à un administrateur
Commentaire de lumesh le 01/05/2004 20:27:05

Par pitié utilise le stripslashes()  pour virer les \' et compagnie !!!
le addslashes() si tu veux en remettre d'autre mais bon ....

signaler à un administrateur
Commentaire de romalafrite le 02/05/2004 20:38:02

?? j'avais la modif avant d'avoir ce commentaire...
Toutes mes excuses ;)

signaler à un administrateur
Commentaire de romalafrite le 02/05/2004 20:38:25

Sinon, tu en penses quoi si tu l'as testé ?

signaler à un administrateur
Commentaire de defkrie le 03/05/2004 12:40:13

pas mal. non testé mais l'apercu est pas mal...
peut ton rajouetr les fichiers  joints

signaler à un administrateur
Commentaire de romalafrite le 03/05/2004 13:04:28

MMh, oui, c'est vrai, ça peut être intéressant. Et peut être fournir la feuille de style aussi, je ferai ça dès que j'ai un peu de temps ;)
Mais il faut le tester ;)

signaler à un administrateur
Commentaire de minta le 04/05/2004 05:00:15

Bonjour,
Je trouve ton application intéressante et je pense que d'autres la trouveront plus intéressante d'autant que j'ai pris la peine de faire un amalgame de ton code avec le script HTMLarea. Cela donne un beau mariage de codes.

signaler à un administrateur
Commentaire de romalafrite le 04/05/2004 07:46:45

N'est-ce pas ;)

signaler à un administrateur
Commentaire de minta le 04/05/2004 19:30:11

Romalafrite la note de 10/10 est de moi :), ton script me donne plein d'idées, encore bravo!

Vous trouverez ma modification à l'adresse suivante:

&lt;http://www.phpcs.com/code.aspx?ID=22503&gt;

signaler à un administrateur
Commentaire de elyps le 23/09/2004 22:14:44

Source testée, reste encore qq améliorations à apporter (attention aux \ et aux / dans les url)

Problème majeur : Le fond des mails est bleu pâle et l'écriture reste en noir..
Alors que ma newsletter est personnalisée entièrement avec du CSS  :(  (dans la preview, c'est mon CSS qui est visible mais il ne prend pas effet à l'arrivée)
Mes membres vont me charier avec une newsletter pareille !!
(Je m'en suis aperçu après l'avoir envoyée)

Dernier point, les possesseurs d'adresses MSN ne lieront probablement jamais la newsletter vue qu'elle arrive sous forme de fichier attaché au mail.  :(


Points positifs : assez rapide (mais ça dépendra des serveurs, évitez les heures de pointes), simple (areuh areuh) et efficace ! (malgré que je tappe ma newsletter sur Dreamweaver et non avec des balises BBcodes).

Merci à toi romalafrite !

signaler à un administrateur
Commentaire de elyps le 23/09/2004 22:20:13

Pour le CSS, j'ai remplacé la ligne 23 :

<div style="display: block; width: 100%; background-color: white; color: black; border: 1px red dashed; ">

Par : <div>

Et le fond bleu pâle persiste, avec la police noire ! :(
Donc je pige pas mais j'ai un peu du mal parfois..

J'attends la mise à jour avec impatience :D

signaler à un administrateur
Commentaire de stepibou le 28/01/2005 19:48:18

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+

signaler à un administrateur
Commentaire de idealyo le 29/05/2007 09:19:10

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 ?

++

signaler à un administrateur
Commentaire de jeanlo73 le 31/05/2007 18:34:27

bonjour

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

Merci

signaler à un administrateur
Commentaire de minta le 31/05/2007 19:33:45

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.

signaler à un administrateur
Commentaire de mdafr le 05/07/2007 16:28:13

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 ?

Ajouter un commentaire



Nos sponsors

Sondage...

CalendriCode

Janvier 2009
LMMJVSD
   1234
567891011
12131415161718
19202122232425
262728293031 

Consulter la suite du CalendriCode



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel BAÏSE, Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,374 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.