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:
// D'abord on se connecte à la base de données, je ne détaillerai pas, pour faire rapide ;)
$liste_req = mysql_query(select nom,prenom,email from table_membres where newsletter='oui'); // Récupération de la liste des membres
// Cette requête est un exemple, il faudra remplacer le nom des tables, des champs et les conditions pour qu'elle fonctionne.
if(mysql_num_rows($liste_req)>0): // Si la liste n'est pas vide
while($membre = mysql_fetch_array($liste_req)): // Je lance le traitement pour chaque membre de la liste
$headers ='From: '. $membre['nom']'.' <'.$membre['email'].'>'."\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($membre['email'], 'Sujet', $message, $headers))
{
echo 'Le message a été envoyé';
}
else
{
echo 'Le message n\'a pu être envoyé';
}
endwhile; // Fin de la boucle de traitement
else: // Si la requête ne me renvoie rien j'affiche un message
echo 'Aucun membre à afficher, la Newsletter ne sera pas envoyée!';
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:
// 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
$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
if(mysql_num_rows($liste_req)>0): // Si la liste n'est pas vide
$bcc = ''; // J'initialise ma variable BCC qui contiendra la liste des membres à qui le mail sera envoyé.
$i = 0; // Cette variable me permettra de formater ma liste correctement
while($membre = mysql_fetch_array($liste_req)): // Je lance le traitement pour chaque membre de la liste
if($i>0){
$bcc .= ', '; // J'ajoute une virgule devant chaque entrée, sauf devant la première (très efficace!)
}
$bcc .= $membre['prenom'].' '.$membre['nom'].' <'.$membre['email'].'>'; // Je formate ma liste
$i++; // J'incrémente ma variable i de 1 pour qu'au prochain passage la virgule soir placée.
endwhile;
// Une fois que c'est fini je définis mes entêtes pour envoyer mon mail
$headers ='From: '. $membre['nom']'.' <'.$membre['email'].'>'."\n";
$headers .='Reply-To: adresse_de_reponse@fai.fr'."\n";
$headers .= 'Cc: ' . "\r\n";
$headers .= 'Bcc: '.$bcc. "\r\n"; // Ici j'ajoute ma variable bcc qui contient ma liste de diffusion parfaitement formatée.
$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($membre['email'], 'Sujet', $message, $headers))
{
echo 'Le message a été envoyé';
}
else
{
echo 'Le message n\'a pu être envoyé';
}
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