IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

EDI, CMS, Outils, Scripts et API PHP Discussion :

[Newsletter] envoi mail par paquet


Sujet :

EDI, CMS, Outils, Scripts et API PHP

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 6
    Points : 5
    Points
    5
    Par défaut [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 : 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';

  2. #2
    Futur Membre du Club
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 6
    Points : 5
    Points
    5
    Par défaut
    bon j'ai trouvé une solution.
    enfin je ne sais pas si c'est "propre" mais ça fonctionne.

    je fais des envois par paquets de 50 mails(page envoi). une fois qu'un paquet est envoyé je redirige vers une autre page(page rapport) qui a une tempo sur sur la redirection vers la page envoi.j'en profite pour afficher diverses infos sur ce qui vient de se passé(nombre et liste des mails envoyé, nombre de paquets restants...).
    une fois que tous les mails sont passé à la moulinette je redirige vers ma page admin...

    en gros redirection avec tempo entre 2 pages.
    une fois que tous les mails ont été envoyé redirection vers la page admin

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [MySQL] Envoyer des e-mails par paquets de 80
    Par lababa dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 01/10/2007, 13h41
  2. Envoi mail par CDO - Courrier Indésirable
    Par titouneee dans le forum VBScript
    Réponses: 9
    Dernier message: 08/06/2007, 14h41
  3. [VBA]Envoi mail par section en automatique
    Par cdumas dans le forum SDK
    Réponses: 10
    Dernier message: 15/03/2007, 17h40
  4. Envoi mail par methode GET
    Par shinrei dans le forum ASP
    Réponses: 7
    Dernier message: 13/07/2006, 20h32
  5. Envoi mail par Notes avec un autre nom
    Par why-not-mi dans le forum VB 6 et antérieur
    Réponses: 4
    Dernier message: 20/10/2005, 16h35

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo