Lien vers ce message 20 Mai 2010, 13:49
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;
	
		//nbre total de mails
		$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];
		
		//prochain numéro de paquet à envoyer
		$numpaquet = 1;

		//nombre de mails par paquet
		$nb = 100;
		
		//determine le nombre de paquet de 100 mails à envoyer (arrondi a l'entier superieur)
		$nbpaquet = ceil($total/$nb);
		
		//on envoie les paquets 1 par 1 avec 30 secondes de delai entre chacun  
		for ($i=1; $i<=$nbpaquet; $i ++)
		{
			$debut = ($numpaquet-1) * $nb;
			
			// On récupère la liste des membres souscrits à la newsletter
			$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);

			// Envoie de la newsletter
			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 :wink: