Changeset 75272 in spip-zone


Ignore:
Timestamp:
Sep 4, 2013, 5:04:51 PM (6 years ago)
Author:
cedric@…
Message:

Gestion des retry : quand un envoie echoue (a priori pb de disponibilité smtp) on incremente le champ try et on re-essaye plus tard pour ce destinataire.
Au bout de 5 fois (personalisable par define('_MAILSHOT_MAX_TRY',10); par exemple), on declare l'envoi en echec. Devrait ameliorer l'envoi par les smtp qui filtrent.

+ on autorise 25s de traitement par appel au lieu de 15s : devrait permettre de mieux suivre la cadence meme si le smtp met du temps à repondre

Location:
_plugins_/mailshot/trunk
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • _plugins_/mailshot/trunk/base/mailshot.php

    r69017 r75272  
    9090                'field' => array(
    9191                        "id_mailshot"      => "bigint(21) DEFAULT '0' NOT NULL",
    92                         "email"              => "varchar(255) NOT NULL DEFAULT ''",
    93                         "date"               => "datetime NOT NULL DEFAULT '0000-00-00 00:00:00'",
    94                         "statut"             => "char(4)  DEFAULT 'todo' NOT NULL", // todo, sent, fail, [read, [clic]],[spam]
     92                        "email"            => "varchar(255) NOT NULL DEFAULT ''",
     93                        "date"             => "datetime NOT NULL DEFAULT '0000-00-00 00:00:00'",
     94                        "statut"           => "char(4)  DEFAULT 'todo' NOT NULL", // todo, sent, fail, [read, [clic]],[spam]
     95                        "try"              => "tinyint NOT NULL DEFAULT 0", // nombre d'essais
    9596                ),
    9697                'key' => array(
  • _plugins_/mailshot/trunk/inc/mailshot.php

    r72128 r75272  
    8282        $now = $_SERVER['REQUEST_TIME'];
    8383        if (!$now) $now=time();
    84         define('_MAILSHOT_MAX_TIME',$now+15); // 15s maxi
     84        define('_MAILSHOT_MAX_TIME',$now+25); // 25s maxi
     85        define('_MAILSHOT_MAX_TRY',5); // 5 essais maxis par destinataires
    8586
    8687        // on traite au maximum 2 serie d'envois dans un appel
     
    9394
    9495                // chercher les N prochains destinataires
    95                 $dests = sql_allfetsel("*","spip_mailshots_destinataires","id_mailshot=".intval($shoot['id_mailshot'])." AND statut=".sql_quote('todo'),'','',"0,$nb_max");
     96                $dests = sql_allfetsel("*","spip_mailshots_destinataires","id_mailshot=".intval($shoot['id_mailshot'])." AND statut=".sql_quote('todo'),'','try',"0,$nb_max");
    9697                if (count($dests)){
    9798                        $options = array('tracking_id'=>"mailshot".intval($shoot['id_mailshot']));
     
    103104                                $s = $subscriber($d['email']);
    104105                                $erreur = $send($s, $corps, $options);
     106                                $try = $d['try']+1;
    105107                                if ($erreur){
    106                                         sql_updateq("spip_mailshots_destinataires",array('statut'=>'fail','date'=>date('Y-m-d H:i:s')),"id_mailshot=".intval($shoot['id_mailshot'])." AND email=".sql_quote($d['email']));
    107                                         sql_update("spip_mailshots",array("current"=>"current+1","failed"=>"failed+1"),"id_mailshot=".intval($shoot['id_mailshot']));
    108                                         spip_log("mailshot_envoyer_lot #".$shoot['id_mailshot']."/".$d['email']." : $erreur","mailshot"._LOG_ERREUR);
     108                                        if ($try>=_MAILSHOT_MAX_TRY){
     109                                                sql_updateq("spip_mailshots_destinataires",array('statut'=>'fail','try'=>$try,'date'=>date('Y-m-d H:i:s')),"id_mailshot=".intval($shoot['id_mailshot'])." AND email=".sql_quote($d['email']));
     110                                                sql_update("spip_mailshots",array("current"=>"current+1","failed"=>"failed+1"),"id_mailshot=".intval($shoot['id_mailshot']));
     111                                                spip_log("mailshot_envoyer_lot #".$shoot['id_mailshot']."/".$d['email']." : $erreur / failed car $try essais","mailshot"._LOG_ERREUR);
     112                                        }
     113                                        else {
     114                                                sql_updateq("spip_mailshots_destinataires",array('try'=>$try,'date'=>date('Y-m-d H:i:s')),"id_mailshot=".intval($shoot['id_mailshot'])." AND email=".sql_quote($d['email']));
     115                                                spip_log("mailshot_envoyer_lot #".$shoot['id_mailshot']."/".$d['email']." : $erreur (essai $try)","mailshot"._LOG_INFO_IMPORTANTE);
     116                                        }
    109117                                }
    110118                                else {
    111119                                        $nb++;
    112                                         sql_updateq("spip_mailshots_destinataires",array('statut'=>'sent','date'=>date('Y-m-d H:i:s')),"id_mailshot=".intval($shoot['id_mailshot'])." AND email=".sql_quote($d['email']));
     120                                        sql_updateq("spip_mailshots_destinataires",array('statut'=>'sent','try'=>$try,'date'=>date('Y-m-d H:i:s')),"id_mailshot=".intval($shoot['id_mailshot'])." AND email=".sql_quote($d['email']));
    113121                                        sql_update("spip_mailshots",array("current"=>"current+1"),"id_mailshot=".intval($shoot['id_mailshot']));
    114122                                        spip_log("mailshot_envoyer_lot #".$shoot['id_mailshot']."/".$d['email']." OK","mailshot");
     
    118126                        // si $nb_max non nul verifier qu'il n'y a plus de dests sur cette envoi pour maj le statut juste en dessous
    119127                        if ($nb_max)
    120                                 $dests = sql_allfetsel("*","spip_mailshots_destinataires","id_mailshot=".intval($shoot['id_mailshot'])." AND statut=".sql_quote('todo'),'','',"0,$nb_max");
     128                                $dests = sql_allfetsel("*","spip_mailshots_destinataires","id_mailshot=".intval($shoot['id_mailshot'])." AND statut=".sql_quote('todo'),'','try',"0,$nb_max");
    121129                }
    122130
  • _plugins_/mailshot/trunk/mailshot_administrations.php

    r69672 r75272  
    3939        );
    4040        $maj['0.2.0'] = array(
    41                 array('maj_tables', array('spip_mailshot_destinataires')),
     41                array('maj_tables', array('spip_mailshots_destinataires')),
    4242        );
    4343        $maj['0.2.1'] = array(
     
    4747                array('sql_alter', 'TABLE spip_mailshot RENAME spip_mailshots'),
    4848                array('sql_alter', 'TABLE spip_mailshot_destinataires RENAME spip_mailshots_destinataires'),
     49        );
     50        $maj['0.3.2'] = array(
     51                array('sql_alter', 'TABLE spip_mailshots_destinataires ADD try tinyint NOT NULL DEFAULT 0'),
    4952        );
    5053
  • _plugins_/mailshot/trunk/paquet.xml

    r72230 r75272  
    22        prefix="mailshot"
    33        categorie="communication"
    4         version="1.4.1"
     4        version="1.5.0"
    55        etat="stable"
    66        compatibilite="[3.0.5;3.0.*]"
    77        logo="prive/themes/spip/images/mailshot-32.png"
    88        documentation="http://contrib.spip.net/mailshot"
    9         schema="0.3.0"
     9        schema="0.3.2"
    1010>
    1111
Note: See TracChangeset for help on using the changeset viewer.