[Newsletter] envoi mail par paquet
bonjour,
je suis en pleine création d'envoi de newsletter.
j'utilise les classes de swiftmailer pour l'envoi des messages.
j'ai 5000adresses/mois. Donc je demande à php de faire des paquets de 50.
Je vois si une adresse à reçu la News en inscrivant une valeur dans la BDD.
mon soucis c'est au bout de quelques minutes la page Web plante(504 gateway timeout).
j'ai fouillé un peu sur le net, et comme solution il y a des personnes qui rajoute cela pour temporiser :
Code:
<?php set_time_limit(180); ?>
Est-ce la bonne solution?
Mais chez moi cette commande me renvoi une erreur :
Warning: set_time_limit() [function.set-time-limit]: Cannot set time limit in safe mode in /home/monsite/www/news/aurachrome/2010_10_15.php on line 79
D'autre part lors de mes essais même avec l'erreur 504 lors d'envoi de 500 mails la page web plante mais tous les mails sont envoyés... quelqu'un pourrait m'expliquer.
En regardant sur ce forum certaines personnes parlent de NewsletTux.
je n'arrive pas à le télécharger depuis le site site de l'éditeur.
ou peut-on le trouver en téléchargement?
Merci. je vous envoi mon code.
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121
| <?php
include ("../../Template/Connect/Connexionbd.php");
require_once '../lib/swift_required.php';
echo '<a href="../admin/admin_menu.php">retour Menu</a><br><br>';
/* EN DEBUT DE FICHIER */
function getmicrotime() // ca c'est du copier/coller pure - se n'est pas de moi
{
list($usec, $sec) = explode(" ",microtime());
return ((float)$usec + (float)$sec);
}
/* AVANT REQUETE */
$time_start = getmicrotime();
/*****************/
/*recup Variables*/
/*****************/
// Recup News ----------------------------------------------\\
$Res_New = mysql_query ("select * from NewsLetter");
$css = mysql_result($Res_New,0,"css");
$sujet = utf8_encode(mysql_result($Res_New,0,"Titre").mysql_result($Res_New,0,"Titre2"));
$infos1 = utf8_encode(mysql_result($Res_New,0,"Infos1"));
$infos2 = utf8_encode(mysql_result($Res_New,0,"Infos2"));
// Recup Nom & Mail expediteur ------------------------------\\
$Res_Exp = mysql_query ("select * from User_Exp");
$Nom_Exp = utf8_encode (mysql_result($Res_Exp,0,"Nom_Exp"));
$Mail_Exp = mysql_result($Res_Exp,0,"Mail_Exp");
// Recup Destinataire ----------------------------------------\\
$Res_Dest = mysql_query("SELECT * FROM User_Dest") or
die('Erreur SQL !<br/>'.$sql.'<br/>'.mysql_error());
/****************/
/* Creation MAIL*/
/****************/
// Mode d'envoi -----------------------------------------------\\
$transport = Swift_MailTransport::newInstance();
$mailer = Swift_Mailer::newInstance($transport);
$nb_mail=0; // init variable
/////////////////////
// recup destinataire
$Res_Dest_tot = mysql_query("SELECT * FROM User_Dest WHERE Envoi = '0'");
// divise le nombre de mail qui non pas encore reçu la news et arrondi sup
// ce qui me donne le nombre de paquet
$Nb_paquet=ceil(mysql_num_rows($Res_Dest_tot)/50);
for ($b=0;$b<$Nb_paquet;$b++) // 1er boucle sur le nombre de paquet
{
// selection et limite de 50 mails
$Res_Dest = mysql_query("SELECT * FROM User_Dest WHERE Envoi = '0' limit 0,50");
$Nb_Dest=mysql_num_rows($Res_Dest);
for ($a=0;$a<$Nb_Dest;$a++) // 2emme boucle sur le nombre de mails restant a traités
{
$Id = mysql_result($Res_Dest,$a,"Id");
$destinataire = mysql_result($Res_Dest,$a,"Mail_Dest");
// de qui/à qui
$message = Swift_Message::newInstance($sujet)
->setFrom(array($Mail_Exp => $Nom_Exp))
->setTo (array())
->setBcc (array($destinataire))
;
// var Image
$cid = $message->embed(Swift_Image::fromPath('aff1.jpg'));
//message
$message->setBody(
'<html>' .
' <head><style type="text/css" media="screen">'.$css.'</style></head>' .
' <body>' .
$infos1.
'<img src="' .$cid . '" alt="Image" /><br />' .
$infos2.
' </body>' .
'</html>',
'text/html'
);
//Envoi du message
if ($result = $mailer->send($message))
{
// mail envoyé : l'adresse passe à l'état 1 pour ne plus être compter
// dans la boucle 2
mysql_query("update User_Dest set Envoi='1' where Id='$Id'");
echo $Id.' - '.$destinataire." OK <br/>"; //test
$nb_mail++;
set_time_limit(180); /* la ca plante
je veux faire une tempo script pour que la page s'arrete un
de charger un moment pour ne pas avoir l'erreur 504 */
}
else
{
echo $destinataire." NG <br/>";
}
}//ok
//}
}
/* APRES REQUETE */
$time_end = getmicrotime();
$time = $time_end - $time_start;
echo '<br/><br/>'.$nb_mail.' mail envoyé en : ' .ceil($time). ' secondes'; |