[PLUGINS] ~maj globale
[lhc/web/www.git] / www / plugins / facteur / inc / envoyer_mail.php
index 66b28a0..d485eb2 100644 (file)
@@ -32,6 +32,7 @@ include_once _DIR_RESTREINT."inc/envoyer_mail.php";
  *       string encodage : encodage a utiliser, parmi 'base64', '7bit', '8bit', 'binary', 'quoted-printable'\r
  *       string mime : mime type du document\r
  *     array headers : tableau d'en-tetes personalises, une entree par ligne d'en-tete\r
+ *     bool exceptions : lancer une exception en cas d'erreur (false par defaut)\r
  * @param string $from (deprecie, utiliser l'entree from de $corps)\r
  * @param string $headers (deprecie, utiliser l'entree headers de $corps)\r
  * @return bool\r
@@ -39,20 +40,22 @@ include_once _DIR_RESTREINT."inc/envoyer_mail.php";
 function inc_envoyer_mail($destinataire, $sujet, $corps, $from = "", $headers = "") {\r
        $message_html   = '';\r
        $message_texte  = '';\r
+       $nom_envoyeur = $cc = $bcc = $repondre_a = '';\r
+       $pieces_jointes = array();\r
 \r
        // si $corps est un tableau -> fonctionnalites etendues\r
        // avec entrees possible : html, texte, pieces_jointes, nom_envoyeur, ...\r
        if (is_array($corps)) {\r
-               $message_html   = $corps['html'];\r
-               $message_texte  = nettoyer_caracteres_mail($corps['texte']);\r
-               $pieces_jointes = $corps['pieces_jointes'];\r
-               $nom_envoyeur = $corps['nom_envoyeur'];\r
-               $from = (isset($corps['from'])?$corps['from']:$from);\r
-               $cc = $corps['cc'];\r
-               $bcc = $corps['bcc'];\r
-               $repondre_a = $corps['repondre_a'];\r
-               $adresse_erreur = $corps['adresse_erreur'];\r
-               $headers = (isset($corps['headers'])?$corps['headers']:$headers);\r
+               $message_html   = isset($corps['html']) ? $corps['html'] : "";\r
+               $message_texte  = isset($corps['texte']) ? nettoyer_caracteres_mail($corps['texte']) : "";\r
+               $pieces_jointes = isset($corps['pieces_jointes']) ? $corps['pieces_jointes'] : array();\r
+               $nom_envoyeur   = isset($corps['nom_envoyeur']) ? $corps['nom_envoyeur'] : "";\r
+               $from = isset($corps['from']) ? $corps['from']: $from;\r
+               $cc   = isset($corps['cc']) ? $corps['cc'] : "";\r
+               $bcc  = isset($corps['bcc']) ? $corps['bcc'] : "";\r
+               $repondre_a = isset($corps['repondre_a']) ? $corps['repondre_a'] : "";\r
+               $adresse_erreur = isset($corps['adresse_erreur']) ? $corps['adresse_erreur'] : "";\r
+               $headers = isset($corps['headers']) ? $corps['headers'] : $headers;\r
                if (is_string($headers)){\r
                        $headers = array_map('trim',explode("\n",$headers));\r
                        $headers = array_filter($headers);\r
@@ -114,10 +117,20 @@ function inc_envoyer_mail($destinataire, $sujet, $corps, $from = "", $headers =
                $message_texte = facteur_mail_html2text($message_html);\r
        }\r
 \r
+       $exceptions = false;\r
+       if (is_array($corps) AND isset($corps['exceptions'])){\r
+               $exceptions = $corps['exceptions'];\r
+       }\r
+       \r
        // mode TEST : forcer l'email\r
        if (defined('_TEST_EMAIL_DEST')) {\r
-               if (!_TEST_EMAIL_DEST)\r
+               if (!_TEST_EMAIL_DEST){\r
+                       spip_log($e="Envois bloques par la constante _TEST_EMAIL_DEST", 'mail.' . _LOG_ERREUR);\r
+                       if ($exceptions) {\r
+                               throw new Exception($e);\r
+                       }\r
                        return false;\r
+               }\r
                else\r
                        $destinataire = _TEST_EMAIL_DEST;\r
        }\r
@@ -126,28 +139,50 @@ function inc_envoyer_mail($destinataire, $sujet, $corps, $from = "", $headers =
        // c'est un format standard dans l'envoi de mail\r
        // les passer au format array pour phpMailer\r
        // mais ne pas casser si on a deja un array en entree\r
-       // si aucun destinataire du courriel on renvoie false (eviter les warning PHP)\r
+       // si pas destinataire du courriel on renvoie false (eviter les warning PHP : ligne 464 de phpmailer-php5/class.phpmailer.php\r
+       // suppression des adresses de courriels invalides, si aucune valide, renvoyer false (eviter un warning PHP : ligne 464 de phpmailer-php5/class.phpmailer.php)\r
        if (is_array($destinataire))\r
                $destinataire = implode(", ",$destinataire);\r
 \r
-       if(strlen($destinataire) > 0)\r
+       if(strlen($destinataire) > 0){\r
                $destinataire = array_map('trim',explode(",",$destinataire));\r
+               foreach ($destinataire as $key => $value) {\r
+                       if(!email_valide($value))\r
+                               unset($destinataire[$key]);\r
+               }\r
+               if(count($destinataire) == 0) {\r
+                       spip_log($e="Aucune adresse email de destination valable pour l'envoi du courriel.", 'mail.' . _LOG_ERREUR);\r
+                       if ($exceptions) {\r
+                               throw new Exception($e);\r
+                       }\r
+                       return false;\r
+               }\r
+       }\r
        else {\r
-               spip_log("Aucune adresse email de destination valable pour l'envoi du courriel.", 'mail.' . _LOG_ERREUR);\r
+               spip_log($e="Aucune adresse email de destination valable pour l'envoi du courriel.", 'mail.' . _LOG_ERREUR);\r
+               if ($exceptions) {\r
+                       throw new Exception($e);\r
+               }\r
                return false;\r
        }\r
 \r
        // On crée l'objet Facteur (PHPMailer) pour le manipuler ensuite\r
        $facteur = new Facteur($destinataire, $sujet, $message_html, $message_texte);\r
+       if (is_array($corps) AND isset($corps['exceptions'])){\r
+               $facteur->SetExceptions($corps['exceptions']);\r
+       }\r
        \r
        // On ajoute le courriel de l'envoyeur s'il est fournit par la fonction\r
        if (empty($from) AND empty($facteur->From)) {\r
                $from = $GLOBALS['meta']["email_envoi"];\r
                if (empty($from) OR !email_valide($from)) {\r
                        spip_log("Meta email_envoi invalide. Le mail sera probablement vu comme spam.", 'mail.' . _LOG_ERREUR);\r
-                       $from = $destinataire;\r
+                       if(is_array($destinataire) && count($destinataire) > 0)\r
+                               $from = $destinataire[0];\r
+                       else\r
+                               $from = $destinataire;\r
                }\r
-       } \r
+       }\r
 \r
        // "Marie Toto <Marie@toto.com>"\r
        if (preg_match(",^([^<>\"]*)<([^<>\"]+)>$,i",$from,$m)){\r
@@ -234,14 +269,13 @@ function inc_envoyer_mail($destinataire, $sujet, $corps, $from = "", $headers =
        $head = $facteur->CreateHeader();\r
 \r
        // Et c'est parti on envoie enfin\r
-       spip_log("mail via facteur\n$head"."Destinataire:".print_r($destinataire,true),'mail.' . _LOG_ERREUR);\r
+       spip_log("mail via facteur\n$head"."Destinataire:".print_r($destinataire,true),'mail');\r
        spip_log("mail\n$head"."Destinataire:".print_r($destinataire,true),'facteur');\r
        $retour = $facteur->Send();\r
        \r
-       if (!$retour)\r
-               spip_log("Erreur Envoi mail via Facteur : ".print_r($facteur->ErrorInfo,true),'facteur');\r
+       if (!$retour){\r
+               spip_log("Erreur Envoi mail via Facteur : ".print_r($facteur->ErrorInfo,true),'mail.'._LOG_ERREUR);\r
+       }\r
 \r
        return $retour ;\r
 }\r
-\r
-?>\r