Bonjour,
Je souhaitais modifier le fichier portail_newsletter.php afin que celui-ci n'envoie que par paquet de 100 mails avec un délai entre chaque paquet.
J'ai trouvé un morceau de script que j'ai adapté, et j'aurais aimé avoir votre avis pour savoir si le code était bon.
Voici le code :
public function send_email()
{
$nbenvoi = 0;
$sql_c = 'SELECT count(u_nickname)
FROM ' . SQL_PREFIX . 'users
WHERE u_newsletter = 1';
$result_c = Fsb::$db->query($sql_c);
$row_c = Fsb::$db->fetch_row($result_c);
$total = $total[0];
$numpaquet = 1;
$nb = 100;
$nbpaquet = ceil($total/$nb);
for ($i=1; $i<=$nbpaquet; $i ++)
{
$debut = ($numpaquet-1) * $nb;
$sql = ("SELECT u_nickname, u_email, u_language
FROM " . SQL_PREFIX . "users
WHERE u_newsletter = 1 LIMIT " . $debut . ", " . $nb);
$result = Fsb::$db->query($sql);
$newsletter = array();
while ($row = Fsb::$db->row($result))
{
if (!isset($newsletter[$row['u_language']]))
{
$newsletter[$row['u_language']] = array();
}
$newsletter[$row['u_language']][] = $row['u_email'];
}
Fsb::$db->free($result);
foreach ($newsletter AS $language => $mail_list)
{
$mail = new Notify_mail();
foreach ($mail_list AS $bcc)
{
$mail->AddBCC($bcc);
}
$mail->Subject = (Http::request('pm_newsletter_subject', 'post')) ? Http::request('pm_newsletter_subject', 'post') : Fsb::$session->lang('no_subject');
$mail->set_file(ROOT . 'lang/' . $language . '/mail/newsletter.txt');
$mail->set_vars(array(
'FORUM_NAME' => Fsb::$cfg->get('forum_name'),
'CONTENT' => htmlspecialchars(Http::request('pm_newsletter_content', 'post')),
'U_FORUM' => Fsb::$cfg->get('fsb_path'),
'U_UNSUBSCRIBE' => Fsb::$cfg->get('fsb_path') . '/index.' . PHPEXT . '?p=portail',
));
$mail->Send();
$mail->SmtpClose();
}
$numpaquet++;
sleep(30);
}
Http::redirect(ROOT . 'index.' . PHPEXT . '?p=portail');
}
Merci par avance pour votre aide
