Newsletter en PHP avec beaucoup d'inscrits : Problème d'envoi

Fermé
aureb09 Messages postés 34 Date d'inscription mardi 29 décembre 2015 Statut Membre Dernière intervention 22 novembre 2021 - Modifié le 28 sept. 2017 à 00:31
yg_be Messages postés 20294 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 29 septembre 2022 - 29 sept. 2017 à 07:58
Bonjour à tous !

J'ai créer une newsletter en PHP avec une table appelé "Newsletter" qui liste toutes les adresses mails des inscrits. Voici mon code :

$msg_email='
<html>
<body style="background:#E1E1E1;padding-top:10px;padding-bottom:10px">
<p>Contenu de la News</p>
</body>
</html>';

$mail_dest = $bdd->query("SELECT * FROM newsletter");

while ($list_mail_dest = $mail_dest->fetch())
{
$list_mail .= ','; //On sépare les adresses par une virgule.
$list_mail .= $list_mail_dest['email'];
}
$mail_dest->closeCursor();

$list_mail = substr($list_mail, 1); //supprime la premier virgule inutile.

$headers = 'From: MonSite <newsletter@monsite.fr>' . "\r\n";
$headers .= 'Content-type: text/html; charset=UTF-8' . "\r\n";
$headers .= 'Bcc:' . $list_mail . '' . "\r\n";
mail('newsletter@monsite.fr', $titre, $msg_email, $headers);


Ce code fonctionne pour un nombre restreint d'adresses mail. Cependant, j'ai près de 500 inscrits et les mails ne sont pas envoyés à cause d'un nombre de destinataires qui seraient restreint par envoi (250 destinataires max apparemment).

Avez-vous des idées pour résoudre ce problème ? J'avais pensé faire des groupes de 50 adresse mails et envoyé un mail par groupe : Pour être plus claire, PHP prendrais les 50 première adresses et enverrai le mail, puis prendrait les 50 suivantes et enverrai un second mail, et ainsi de suite... Je ne sais pas trop comment ecrire ce script? Avec une boucle for et while ?

Merci d'avance pour vos réponses !

3 réponses

jordane45 Messages postés 36351 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 29 septembre 2022 4 352
28 sept. 2017 à 09:49
Bonjour,

un truc du genre:

//fonction pour récupérer la liste de mails
function get_listedif($arrayTotal, $deb, $fin){
  $result = array();

  for($i=$deb;$i<=$fin;$i++){
    $result[] = $arrayTotal[$i];
  }
  //on transforme cette liste en string séparée par ","
  return join(",",$result);
}


// $all_adre  : Toutes les adresses provenant de ta bdd  via un fetchAll


$nbpaquets = 25; //nom de mails par envoi

$nb_adr_total = count($all_adre);
$nb_envois = ceil($nb_adr_total / $nbpaquets)

for($j = 1 ; $j<=$nb_envois;$j++){
  $liste_dif = get_listedif($all_adre, ($j-1)*nbpaquets, $j*nbpaquets) ; 
  
  //ici tu fais ton envoi de mails
  //...
  
  
  //...

}

0
aureb09 Messages postés 34 Date d'inscription mardi 29 décembre 2015 Statut Membre Dernière intervention 22 novembre 2021 2
Modifié le 28 sept. 2017 à 19:02
Bonjour, Je te remercie de ta réponse ! Ton script me paraît intéressant du coup je l'ai travaillé:


$req = $bdd->query("SELECT * FROM newsletter");

// $all_adre : Toutes les adresses provenant de ta bdd via un fetchAll
$all_adre = $req->fetchAll();

//fonction pour récupérer la liste de mails
function get_listedif($arrayTotal, $deb, $fin){
$result = array();

for($i=$deb;$i<=$fin;$i++){
$result[] = $arrayTotal[$i];
}
//on transforme cette liste en string séparée par ","
return join(",",$result);
}


$nbpaquets = 2; //Je prend 2 car je fait un test avec 20 adresses
$nb_adr_total = count($all_adre);
$nb_envois = ceil($nb_adr_total / $nbpaquets);

for($j=1;$j<=$nb_envois;$j++){
$liste_dif = get_listedif($all_adre, ($j-1)*$nbpaquets, $j*$nbpaquets) ;

//affiche mails
var_dump($liste_dif);

}

J'ai fait un var_dump de la liste des mails et cela me renvoi que ceci :
string(17) "Array,Array,Array" string(17) "Array,Array,Array" string(17) "Array,Array,Array" string(17) "Array,Array,Array" string(17) "Array,Array,Array" string(17) "Array,Array,Array" string(17) "Array,Array,Array" string(17) "Array,Array,Array" string(17) "Array,Array,Array" string(17) "Array,Array,Array" string(17) "Array,Array,Array" string(17) "Array,Array,Array" string(7) "Array,,"


Pourquoi je ne vois pas mes adresses ?
Merci pour ton aide !!
0
jordane45 Messages postés 36351 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 29 septembre 2022 4 352
28 sept. 2017 à 19:32
Un oublie..

 $result[] = $arrayTotal[$i]['tonchampmail'];
0
yg_be Messages postés 20294 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 29 septembre 2022 1 225
28 sept. 2017 à 20:08
bonsoir, teste aussi avec par exemple 20 adresses et des paquets de 11.
0
aureb09 Messages postés 34 Date d'inscription mardi 29 décembre 2015 Statut Membre Dernière intervention 22 novembre 2021 2
28 sept. 2017 à 23:20
Merci !
Le script marche mais il envoi uniquement aux mails présents dans le dernier tableau de la boucle :/
0
yg_be Messages postés 20294 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 29 septembre 2022 1 225
29 sept. 2017 à 07:58
fais-tu l'envoi de mails dans la boucle (où tu as mis var_dump?), ou après la boucle?
0