Votre question

créer une newsletter

Tags :
  • format
  • Programmation
Dernière réponse : dans Programmation
22 Mai 2007 17:15:25

Bonjour à tous,
Je cherche à créer une newsletter en format html pour mon site internet.
J'ai déjà créé une base de données mysql qui recueillera les noms et adresses mails de ceux qui s'inscrivent.
J'ai également créé un formulaire d'inscription sur mon site qui enregistre les inscriptions dans ma base de données.
J'ai enfin créé ma newsletter sous dreamweaver comme une page quelconque de mon site, avec du texte, des images et des liens de type "lire la suite").
Jusqu'ici aucun souci
Maintenant le plus dur reste à faire : relier le tout pour envoyer ma newsletter aux inscrits! je ne sais pas trop comment m'y prendre. je ne veux pas utiliser d'outils newsletter tout faits à installer sur mon site, je veux vraiment faire ça moi même et écrire un code qui permet d'envoyer mon fichier newsletter.htm aux adresses mails enregistrées dans ma base de données.
PS : mon hébergeur est ovh, je pense qu'il prend en compte la fonction mail() mais je ne suis pas sûre.

Quelq'un peut me donner un coup de main?

Merci d'avance pour votre aide à tous

Autres pages sur : creer newsletter

23 Mai 2007 10:08:33

Bon après des recherches sur la fonction mail(), je pense que je pourrais utiliser un code comme ceci, qui permette d'envoyer mon mail sous format html afin de garder ma mise en forme :

<?php
$headers ='From: "nom"<adresse@fai.fr>'."\n";
$headers .='Reply-To: adresse_de_reponse@fai.fr'."\n";
$headers .='Content-Type: text/html; charset="iso-8859-1"'."\n";
$headers .='Content-Transfer-Encoding: 8bit';

$message ='<html><head><title>Un titre ici</title></head><body>Un message de test</body></html>';

if(mail('adresse_du_destinataire@fai.fr', 'Sujet', $message, $headers))
{
echo 'Le message a été envoyé';
}
else
{
echo 'Le message n\'a pu être envoyé';
}
?>

Mais le problème est que je dois envoyer le mail aux contacts enregistrés dans ma base de données, et non à un contact que je détermine directement dans le code.
Comment faire pour envoyer le mail à chaque adresse récupérée dans ma bdd?

Merci d'avance pour votre aide
30 Mai 2007 17:03:00

up svp!
Ne me dites pas que personne n'a jamais fait d'envoi de newsletter!
Contenus similaires
3 Mai 2011 12:00:09

Salut;

Pas de stress, je vais te filer quelques tuyaux:

Pour diffuser une Newsletter tu as deux possibilités.

La première :

- Faire une requête dans ta base de données qui récupère la liste de tous les destinataires ;

- Créer une boucle qui enverra un e-mail contenant ta newsletter à chacun des destinataires grâce à la fonction
mail() ;

La deuxième :

- Faire une requête dans ta base de données qui récupère la liste de tous les destinataires;

- Créer une boucle qui récupèrera les adresses e-mail de tous tes destinataires et les mettra l'une à la suite de l'autre ;

- Envoyer un seul e-mail qui contiendra la liste de tous tes destinataires dans le champ Bcc ;



Dans les deux cas il y a des avantages et des inconvénients, tout dépendra de ton hébergeur ;) 

Voici un exemple de code simplifié de la première solution:

  1. // D'abord on se connecte à la base de données, je ne détaillerai pas, pour faire rapide ;)
  2. $liste_req = mysql_query(select nom,prenom,email from table_membres where newsletter='oui'); // Récupération de la liste des membres
  3. // Cette requête est un exemple, il faudra remplacer le nom des tables, des champs et les conditions pour qu'elle fonctionne.
  4.  
  5. if(mysql_num_rows($liste_req)>0): // Si la liste n'est pas vide
  6. while($membre = mysql_fetch_array($liste_req)): // Je lance le traitement pour chaque membre de la liste
  7. $headers ='From: '. $membre['nom']'.' <'.$membre['email'].'>'."\n";
  8. $headers .='Reply-To: adresse_de_reponse@fai.fr'."\n";
  9. $headers .='Content-Type: text/html; charset="iso-8859-1"'."\n";
  10. $headers .='Content-Transfer-Encoding: 8bit';
  11.  
  12. $message ='<html><head><title>Un titre ici</title></head><body>Un message de test</body></html>';
  13.  
  14. if(mail($membre['email'], 'Sujet', $message, $headers))
  15. {
  16. echo 'Le message a été envoyé';
  17. }
  18. else
  19. {
  20. echo 'Le message n\'a pu être envoyé';
  21. }
  22. endwhile; // Fin de la boucle de traitement
  23.  
  24. else: // Si la requête ne me renvoie rien j'affiche un message
  25. echo 'Aucun membre à afficher, la Newsletter ne sera pas envoyée!';
  26. endif;


Dans ce cas précis tu peux personnaliser le contenu de ton mail pour chaque membre, comme par exemple leur rappeler leurs identifiants pour se connecter sur ton site, mais l'inconvénient c'est que tu appelleras autant de fois la fonction mail() qu'il y a de membres dans ta table.

Voici un exemple de code simplifié de la deuxième solution:
  1. // Dans ce cas on fait pareil, on créée une requête qui va récupérer les adresses mail des membres dans la table
  2.  
  3. $liste_req = mysql_query(select nom,prenom,email from table_membres where newsletter='oui'); // Récupération de la liste des membres qui ont souscrit à la newsletter
  4. if(mysql_num_rows($liste_req)>0): // Si la liste n'est pas vide
  5.  
  6. $bcc = ''; // J'initialise ma variable BCC qui contiendra la liste des membres à qui le mail sera envoyé.
  7. $i = 0; // Cette variable me permettra de formater ma liste correctement
  8. while($membre = mysql_fetch_array($liste_req)): // Je lance le traitement pour chaque membre de la liste
  9. if($i>0){
  10. $bcc .= ', '; // J'ajoute une virgule devant chaque entrée, sauf devant la première (très efficace!)
  11. }
  12. $bcc .= $membre['prenom'].' '.$membre['nom'].' <'.$membre['email'].'>'; // Je formate ma liste
  13.  
  14. $i++; // J'incrémente ma variable i de 1 pour qu'au prochain passage la virgule soir placée.
  15. endwhile;
  16.  
  17. // Une fois que c'est fini je définis mes entêtes pour envoyer mon mail
  18. $headers ='From: '. $membre['nom']'.' <'.$membre['email'].'>'."\n";
  19. $headers .='Reply-To: adresse_de_reponse@fai.fr'."\n";
  20. $headers .= 'Cc: ' . "\r\n";
  21. $headers .= 'Bcc: '.$bcc. "\r\n"; // Ici j'ajoute ma variable bcc qui contient ma liste de diffusion parfaitement formatée.
  22.  
  23. $headers .='Content-Type: text/html; charset="iso-8859-1"'."\n";
  24. $headers .='Content-Transfer-Encoding: 8bit';
  25.  
  26. $message ='<html><head><title>Un titre ici</title></head><body>Un message de test</body></html>';
  27.  
  28. if(mail($membre['email'], 'Sujet', $message, $headers))
  29. {
  30. echo 'Le message a été envoyé';
  31. }
  32. else
  33. {
  34. echo 'Le message n\'a pu être envoyé';
  35. }


La deuxième solution a l'avantage de n'utiliser qu'une seule fois la fonction mail() mais si ton FAI limite le nombre de destinataires d'un même message, c'est cuit!

J'espère t'avoir aidé ;) 

Kroan
3 Mai 2011 12:02:50

C'est gentil mais 4 ans après je pense que la personne à trouver.
3 Mai 2011 12:33:02

ça ne fait rien, je pensais aussi à ceux qui cherchent encore aujourd'hui, ça peut servir ;) 
Tom's guide dans le monde
  • Allemagne
  • Italie
  • Irlande
  • Royaume Uni
  • Etats Unis
Suivre Tom's Guide
Inscrivez-vous à la Newsletter
  • ajouter à twitter
  • ajouter à facebook
  • ajouter un flux RSS