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 : Sélectionner tout - Visualiser dans une fenêtre à part
<?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 : Sélectionner tout - Visualiser dans une fenêtre à part
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&eacute; en : ' .ceil($time). ' secondes';