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

Symfony PHP Discussion :

emailing à route via une tache symfony


Sujet :

Symfony PHP

  1. #1
    Membre du Club
    Inscrit en
    Avril 2010
    Messages
    80
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 80
    Points : 42
    Points
    42
    Par défaut emailing à route via une tache symfony
    Bonjour à tous,

    J'ai mis en place un moteur d'emailing qui doit être lancer tous les jour sà une heure précise via une tache symfony que j'ai crée.
    Le problème c'est que lorsqu'il s'agit d'envoyer un emailing à 10 ou 15 personnes ca marche sans probleme; mais là je dois l'envoyer à 8000 personnes et ca ne marche pas meme pas pour le premier.
    Dans mon fichier factories.yml j'ai essayer ces deux strategies d'envoi :spool et realtime rien n'a change
    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
     
    prod:
      logger:
        class:   sfNoLogger
        param:
          level:   err
          loggers: ~
     
      mailer:
        class: sfMailer
        param:
          logging:           %SF_LOGGING_ENABLED%
          charset:           %SF_CHARSET%
          delivery_strategy: realtime
          transport:
            class: Swift_SmtpTransport
            param:
              host:       ****
              port:       ****
              encryption: 
              username:   
              password:
    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
     
    prod:
      logger:
        class:   sfNoLogger
        param:
          level:   err
          loggers: ~
     
      mailer:
        class: sfMailer
        param:
          logging:           %SF_LOGGING_ENABLED%
          charset:           %SF_CHARSET%
          delivery_strategy: spool
          transport:
            class: Swift_SmtpTransport
            param:
              host:       ****
              port:       ****
              encryption: 
              username:   
              password:
    ma tache est bien créee dans le dossier lib/task

    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
     
    class emailingTask extends sfBaseTask {
     
        protected function configure()
      {
        // // add your own arguments here
         //$this->addArguments(array(new sfCommandArgument('my_arg', sfCommandArgument::REQUIRED, 'My argument')));
     
        $this->addOptions(array(
          new sfCommandOption('application', null, sfCommandOption::PARAMETER_REQUIRED, 'frontend'),
          new sfCommandOption('env', null, sfCommandOption::PARAMETER_REQUIRED, 'The environment', 'prod'),
          new sfCommandOption('connection', null, sfCommandOption::PARAMETER_REQUIRED, 'The connection name', 'doctrine'),
          // add your own options here
        ));
     
        $this->namespace        = 'send';
        $this->name             = 'emailing';
        $this->briefDescription = '';
        $this->detailedDescription = <<<EOF
    The [send:emailing|INFO] task does things.
    Call it with:
     
      [php symfony send:emailing|INFO]
    EOF;
      }
     
    /*  protected function execute($arguments = array(), $options = array())
      {
        // initialize the database connection
        //$databaseManager = new sfDatabaseManager($this->configuration);
        //$connection = $databaseManager->getDatabase($options['connection'])->getConnection();
     
          //$this->logSection('say', 'Hello, '.$arguments['my_arg'].'!');
         try
          {
             $client = new SoapClient('http://hyundai.bdmr.fr/hyundai/ws/SimpleWS?wsdl');
             $connexion = $client->authenticate('WSDL','buno2010');
     
     
          }
           catch(SoapFault $e)
           {
               exit ($e->getMessage());
           }
          $from = 'arnaud2004@yahoo.fr';
          $recipient = 'arnaud.femtchou@digikeys.fr';
          $subject = 'sujet';
          $messageBody = $connexion ;
     
          $mailer  = $this->getMailer();
          $mailer->composeAndSend($from, $recipient, $subject, $messageBody);
     
        // add your code here
      }*/
     
     
     
      protected function execute($arguments = array(), $options = array())
      {
       ....
    }
    et sur le serveur j'appelle ma tache comme ceci pour qu'elle se lance à 11h37 par exemple

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    37 11  * * * /usr/bin/php5 --php-ini /etc/php5/apache2/php.ini /var/www/emailingauto/symfony send:emailing --application="frontend" > /home/result.log
    elle marche bien quand il s'agit d'une petite quantite mais quand on passe la barre des 2000 ! ca merde!!

    Au secouuuuuuuuurs!!!!!!!!

  2. #2
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 28
    Points : 13
    Points
    13
    Par défaut
    Je dis peut être une bêtise, mais ca ne peut pas être dû au fait que par défaut PHP limite le temps d'exécution d'une page à 30secondes, et que envoyer 8000emails risque de mettre plus que 30sec ?

  3. #3
    Membre du Club
    Inscrit en
    Avril 2010
    Messages
    80
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 80
    Points : 42
    Points
    42
    Par défaut
    je sais pas trop comment ca marche; mais je pense que, vu que c'est une tache que j'appelle et non une page web; le timing de 30s n'est pas pris en compte. bon après je suis pas très sur de c que je dis.

    Mais même si le timing est de 30s , il devait au moins marcher pour les premiers mails, ce qui n'est pas le cas.

    ceci dit où est ce que je peux augmenter le temps d'exécution sur un projet symfony??.

  4. #4
    Expert éminent
    Avatar de Michel Rotta
    Homme Profil pro
    DPO
    Inscrit en
    Septembre 2005
    Messages
    4 954
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : DPO
    Secteur : Distribution

    Informations forums :
    Inscription : Septembre 2005
    Messages : 4 954
    Points : 8 486
    Points
    8 486
    Par défaut
    oOZarkOo +1

    Tu envoies 8000 courriels différents ou un courriel à 8000 personnes ?

    Edit
    La durée maximum d'exécution est pour tous les scripts PHP, ligne de commande ou pas.

    La modification est dans les php.ini.

    Attention, suivant ta configuration, il est possible que tu aies un php.ini pour le web et un autre pour la ligne de commande. Vérifie avec un phpInfo() que tu peux lancer en web et en local pour comparer.
    Si tu donnes un poisson à un homme, il mangera un jour. Si tu lui apprends à pêcher, il mangera toujours (Lao Tseu).

    • Pensez à valoriser les réponses pertinantes, cliquez sur le bouton vert +1 pour indiquer votre accord avec la solution proposée.
    • Pensez à utiliser la balise [code] pour afficher du code, elle est cachée sous le bouton [#] dans l'éditeur.
    • Une discussion est terminée ? Alors le bouton est votre ami !

  5. #5
    Membre du Club
    Inscrit en
    Avril 2010
    Messages
    80
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 80
    Points : 42
    Points
    42
    Par défaut
    j'essaye d'envoyer 8000 e-mails à 8000 personnes; parce que chaque e-mail est personnaliser par le nom, prénom et autre
    je viens d'augmenter la timeout et redémarrer le serveur, mais rien ne marche!

  6. #6
    Expert éminent
    Avatar de Michel Rotta
    Homme Profil pro
    DPO
    Inscrit en
    Septembre 2005
    Messages
    4 954
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : DPO
    Secteur : Distribution

    Informations forums :
    Inscription : Septembre 2005
    Messages : 4 954
    Points : 8 486
    Points
    8 486
    Par défaut
    A raison de 2 courriel par seconde, il nous reste dans les 4000s de traitement, soit plus d'une heure, on est loin des 30"...

    Peut-être avec un traitement réentrant, dans le genre, tu traites X courriel, puis ton application renvoie la requête et se ferme.
    Si tu donnes un poisson à un homme, il mangera un jour. Si tu lui apprends à pêcher, il mangera toujours (Lao Tseu).

    • Pensez à valoriser les réponses pertinantes, cliquez sur le bouton vert +1 pour indiquer votre accord avec la solution proposée.
    • Pensez à utiliser la balise [code] pour afficher du code, elle est cachée sous le bouton [#] dans l'éditeur.
    • Une discussion est terminée ? Alors le bouton est votre ami !

  7. #7
    Membre du Club
    Inscrit en
    Avril 2010
    Messages
    80
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 80
    Points : 42
    Points
    42
    Par défaut
    Je parcoure une table avec la boucle for; je récupère chaque personne et ses info, je configure mon template et j'envoie un émail, jusqu'à la fin de la table mail.bien sûr y a deux ou trois méthodes qui sont appelées entre temps.

    Ca devrait aller ca!??

    PS: la population était au nombre de 8133 et le truc a juste route 122 mails s'est arrêté.J n sais pas si cette info peut vous guider.

  8. #8
    Expert éminent
    Avatar de Michel Rotta
    Homme Profil pro
    DPO
    Inscrit en
    Septembre 2005
    Messages
    4 954
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : DPO
    Secteur : Distribution

    Informations forums :
    Inscription : Septembre 2005
    Messages : 4 954
    Points : 8 486
    Points
    8 486
    Par défaut
    Ceci confirme la durée de traitement de plus ou moins (un peu moins) de deux courriel par seconde.

    Il faut donc, soit que les traitements durent moins de 30 seconde (peut réaliste), soit utiliser un code ré-entrant. Voir précédant poste.

    Je ne pense pas que passer les paramètres de php pour autoriser des scripts de 90 minutes soit une bonne idée.

    Edit
    Une autre idée. Tu crées soit un champs dans ta table, soit une table supplémentaire pour ceux qui doivent recevoir un courriel. L'idée est de pouvoir facilement vérifier à qui le courriel à été envoyé.

    Tu limites volontairement ta procédure à un certain nombre de personnes parmi celles qui n'ont pas encore eu leur courriel (dison 100, soit moins de 30" de traitement).

    Tu crées un cron qui envoie la commande toutes les minutes.

    Il faudra donc 80 minutes pour envoyer tes courriels. Et plus de blocage. Après, tu peux toujours adapter en fonction des performances.

    Attention aux procédures anti-spam de certains serveur de messagerie (ton serveur, pas celui des destinataires) qui risquent de voir ta procédure comme une tentative de spam.

    Attention aux demandes préalables d'autorisation d'envoyer un courriel qui doit être faîte à tous particulier en France.
    Si tu donnes un poisson à un homme, il mangera un jour. Si tu lui apprends à pêcher, il mangera toujours (Lao Tseu).

    • Pensez à valoriser les réponses pertinantes, cliquez sur le bouton vert +1 pour indiquer votre accord avec la solution proposée.
    • Pensez à utiliser la balise [code] pour afficher du code, elle est cachée sous le bouton [#] dans l'éditeur.
    • Une discussion est terminée ? Alors le bouton est votre ami !

Discussions similaires

  1. [XL-2010] Problème envoi de mail avec Lotus lors du lancement d'une Macro via une tache planifiée
    Par Banjalex59 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 24/03/2015, 20h19
  2. [1.x] envoi d'email via une tache cron
    Par erictomcat dans le forum Symfony
    Réponses: 2
    Dernier message: 17/05/2011, 20h18
  3. [OL-2003] Envoyer un email via les taches planifiées
    Par mabe99 dans le forum VBA Outlook
    Réponses: 0
    Dernier message: 26/08/2009, 21h06
  4. [PasswordRecovery][SSL] envoi d'email via une connexion securisée
    Par TheBlackReverand dans le forum ASP.NET
    Réponses: 2
    Dernier message: 27/03/2009, 18h05
  5. Planifier une tache windows via un formulaire VB
    Par Smip99 dans le forum Windows Forms
    Réponses: 2
    Dernier message: 27/03/2008, 12h48

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