Changeset 118890 in spip-zone


Ignore:
Timestamp:
Dec 4, 2019, 10:37:51 AM (10 months ago)
Author:
Cerdic
Message:

la detection de mail blocke/en echec n'est pas forcement synchrone, on revoit donc l'architecture pour tout deleguer a facteur, avec une implementation basique par defaut

Location:
_plugins_/facteur/trunk
Files:
1 added
3 edited

Legend:

Unmodified
Added
Removed
  • _plugins_/facteur/trunk

    • Property subgit:lock:69227cb8f79c908f144dc8c7cf597143c4d26ccd deleted
    • Property subgit:lock:79d035f349ffe6a8720d18409c4c75ac58a4436b set to 2019-12-04T11:38:42.612
  • _plugins_/facteur/trunk/inc/Facteur/FacteurMail.php

    r118882 r118890  
    6565         */
    6666        protected $autoBcc = null;
     67
     68        /**
     69         * @var bool
     70         */
     71        protected $important = false;
     72
     73        protected $sendFailFunction = null;
    6774
    6875        /**
     
    252259         * Set the important flag more or less supported by client mails
    253260         */
    254         public function setImportant() {
    255                 $this->addCustomHeader("X-Priority", "1 (High)");
    256                 $this->addCustomHeader("X-MSMail-Priority", "High");
    257                 $this->addCustomHeader("Importance", "High");
     261        public function setImportant($important = true) {
     262                if ($important) {
     263                        $this->addCustomHeader("X-Priority", "1 (High)");
     264                        $this->addCustomHeader("X-MSMail-Priority", "High");
     265                        $this->addCustomHeader("Importance", "High");
     266                }
     267                $this->important = $important;
     268        }
     269
     270        /**
     271         * Set the fail function to call if an important mail was not sent
     272         * @param $function
     273         * @param $args
     274         * @param $include
     275         */
     276        public function setSendFailFunction($function, $args, $include) {
     277                $this->sendFailFunction = array(
     278                        'function' => $function,
     279                        'args' => $args,
     280                        'include' => $include,
     281                );
    258282        }
    259283
     
    472496
    473497        /**
     498         * Verifier si il faut envoyer le mail d'alerte
     499         * @param mixed $res
     500         * @return mixed
     501         */
     502        protected function sendAlertIfNeeded($res) {
     503                if ($res === false) {
     504                        if ($this->important and !empty($this->sendFailFunction)) {
     505                                $facteur_envoyer_alerte_fail = charger_fonction('facteur_envoyer_alerte_fail','inc');
     506                                $facteur_envoyer_alerte_fail($this->sendFailFunction['function'], $this->sendFailFunction['args'], $this->sendFailFunction['include']);
     507                        }
     508                }
     509                return $res;
     510        }
     511
     512        /**
    474513         * Une fonction wrapper pour appeler une methode de phpMailer
    475514         * en recuperant l'erreur eventuelle, en la loguant via SPIP et en lancant une exception si demandee
     
    513552                $this->forceFromIfNeeded();
    514553                $args = func_get_args();
    515                 return $this->callWrapper(array('parent', 'Send'), $args);
     554                $res = $this->callWrapper(array('parent', 'Send'), $args);
     555                return $this->sendAlertIfNeeded($res);
    516556        }
    517557
  • _plugins_/facteur/trunk/inc/envoyer_mail.php

    r118887 r118890  
    329329        spip_log("mail via facteur\n$trace",'mail'._LOG_FACTEUR);
    330330        spip_log("mail\n$backtrace\n$trace",'facteur'._LOG_FACTEUR);
     331
     332        // si c'est un mail important, preparer le forward a envoyer en cas d'echec
     333        // mais on delegue la gestion de cet envoi au facteur qui est le seul a savoir quoi faire
     334        // en fonction de la reponse et du modus operandi pour connaitre le status du message
     335        if ($important and $dest_alertes = $facteur->Sender) {
     336                $dest = (is_array($destinataire) ? implode(', ', $destinataire) : $destinataire);
     337                $sujet_alerte = _L("[MAIL] FAIL envoi mail pour @dest@ (était: @sujet@)", array('dest' => $dest, 'sujet' => $sujet));
     338                $args = func_get_args();
     339                $args[0] = $dest_alertes;
     340                $args[1] = $sujet_alerte;
     341                $args[2]['important'] = false; // ne pas faire une alerte sur l'envoi de l'alerte etc.
     342                $facteur->setSendFailFunction('envoyer_mail', $args, 'inc/');
     343        }
     344
    331345        $retour = $facteur->Send();
    332346
    333347        if (!$retour){
    334348                spip_log("Erreur Envoi mail via Facteur : ".print_r($facteur->ErrorInfo,true),'mail.'._LOG_ERREUR);
    335 
    336                 if ($important
    337                   and $dest_alertes = $this->Sender) {
    338                         $dest = (is_array($destinataire) ? implode(', ', $destinataire) : $destinataire);
    339                         $sujet_alerte = _L("Fail envoi mail pour @dest@ (était: @sujet@)", array('email' => $dest, 'sujet' => $sujet));
    340                         $facteur->setDest($dest_alertes);
    341                         $facteur->setObjet($sujet_alerte);
    342                         $facteur->Send();
    343                 }
     349                // si le mail est important, c'est le facteur qui aura gere l'envoi de l'alerte fail
    344350        }
    345351
Note: See TracChangeset for help on using the changeset viewer.