[SPIP][PLUGINS] v3.0-->v3.2
[lhc/web/www.git] / www / plugins / facteur / inc / envoyer_mail.php
index d485eb2..6c9f746 100644 (file)
@@ -24,7 +24,11 @@ include_once _DIR_RESTREINT."inc/envoyer_mail.php";
  *     string nom_envoyeur : un nom d'envoyeur pour completer l'email from\r
  *     string cc : destinataires en copie conforme\r
  *     string bcc : destinataires en copie conforme cachee\r
- *     string|array repondre_a : une ou plusieurs adresses à qui répondre\r
+ *     string|array repondre_a : une ou plusieurs adresses à qui répondre.\r
+ *       On peut aussi donner une liste de tableaux du type :\r
+ *         array('email' => 'test@exemple.com', 'nom' => 'Adresse de test')\r
+ *       pour spécifier un nom d'envoyeur pour chaque adresse.\r
+ *     string nom_repondre_a : le nom d'envoyeur pour compléter l'email repondre_a\r
  *     string adresse_erreur : addresse de retour en cas d'erreur d'envoi\r
  *     array pieces_jointes : listes de pieces a embarquer dans l'email, chacune au format array :\r
  *       string chemin : chemin file system pour trouver le fichier a embarquer\r
@@ -54,6 +58,7 @@ function inc_envoyer_mail($destinataire, $sujet, $corps, $from = "", $headers =
                $cc   = isset($corps['cc']) ? $corps['cc'] : "";\r
                $bcc  = isset($corps['bcc']) ? $corps['bcc'] : "";\r
                $repondre_a = isset($corps['repondre_a']) ? $corps['repondre_a'] : "";\r
+               $nom_repondre_a = isset($corps['nom_repondre_a']) ? $corps['nom_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
@@ -121,7 +126,7 @@ function inc_envoyer_mail($destinataire, $sujet, $corps, $from = "", $headers =
        if (is_array($corps) AND isset($corps['exceptions'])){\r
                $exceptions = $corps['exceptions'];\r
        }\r
-       \r
+\r
        // mode TEST : forcer l'email\r
        if (defined('_TEST_EMAIL_DEST')) {\r
                if (!_TEST_EMAIL_DEST){\r
@@ -159,11 +164,16 @@ function inc_envoyer_mail($destinataire, $sujet, $corps, $from = "", $headers =
                }\r
        }\r
        else {\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
+               if ($bcc) {\r
+                       // On peut envoyer de mail que en bcc\r
+                       $destinataire = '';\r
+               } else {\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
-               return false;\r
        }\r
 \r
        // On crée l'objet Facteur (PHPMailer) pour le manipuler ensuite\r
@@ -171,7 +181,7 @@ function inc_envoyer_mail($destinataire, $sujet, $corps, $from = "", $headers =
        if (is_array($corps) AND isset($corps['exceptions'])){\r
                $facteur->SetExceptions($corps['exceptions']);\r
        }\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
@@ -213,7 +223,7 @@ function inc_envoyer_mail($destinataire, $sujet, $corps, $from = "", $headers =
                else\r
                        $facteur->AddCC($cc);\r
        }\r
-       \r
+\r
        // S'il y a des copies cachées à envoyer\r
        if ($bcc){\r
                if (is_array($bcc))\r
@@ -222,16 +232,24 @@ function inc_envoyer_mail($destinataire, $sujet, $corps, $from = "", $headers =
                else\r
                        $facteur->AddBCC($bcc);\r
        }\r
-       \r
+\r
        // S'il y a une adresse de reply-to\r
-       if ($repondre_a){\r
-               if (is_array($repondre_a))\r
-                       foreach ($repondre_a as $courriel)\r
-                               $facteur->AddReplyTo($courriel);\r
-               else\r
+       if ($repondre_a) {\r
+               if (is_array($repondre_a)) {\r
+                       foreach ($repondre_a as $courriel) {\r
+                               if (is_array($courriel)) {\r
+                                       $facteur->AddReplyTo($courriel['email'], $courriel['nom']);\r
+                               } else {\r
+                                       $facteur->AddReplyTo($courriel);\r
+                               }\r
+                       }\r
+               } elseif ($nom_repondre_a) {\r
+                       $facteur->AddReplyTo($repondre_a, $nom_repondre_a);\r
+               } else {\r
                        $facteur->AddReplyTo($repondre_a);\r
+               }\r
        }\r
-       \r
+\r
        // S'il y a des pièces jointes on les ajoute proprement\r
        if (count($pieces_jointes)) {\r
                foreach ($pieces_jointes as $piece) {\r
@@ -261,10 +279,10 @@ function inc_envoyer_mail($destinataire, $sujet, $corps, $from = "", $headers =
                                $facteur->AddCustomHeader($h);\r
                }\r
        }\r
-       \r
+\r
        // On passe dans un pipeline pour modifier tout le facteur avant l'envoi\r
        $facteur = pipeline('facteur_pre_envoi', $facteur);\r
-       \r
+\r
        // On génère les headers\r
        $head = $facteur->CreateHeader();\r
 \r
@@ -272,7 +290,7 @@ function inc_envoyer_mail($destinataire, $sujet, $corps, $from = "", $headers =
        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
+\r
        if (!$retour){\r
                spip_log("Erreur Envoi mail via Facteur : ".print_r($facteur->ErrorInfo,true),'mail.'._LOG_ERREUR);\r
        }\r