$repondre_a = $corps['repondre_a'];\r
$adresse_erreur = $corps['adresse_erreur'];\r
$headers = (isset($corps['headers'])?$corps['headers']:$headers);\r
- if (is_string($headers))\r
+ if (is_string($headers)){\r
$headers = array_map('trim',explode("\n",$headers));\r
+ $headers = array_filter($headers);\r
+ }\r
}\r
// si $corps est une chaine -> compat avec la fonction native SPIP\r
// gerer le cas ou le corps est du html avec un Content-Type: text/html dans les headers\r
AND strpos($corps,"<")!==false // eviter les tests suivants si possible\r
AND $ttrim = trim($corps)\r
AND substr($ttrim,0,1)=="<"\r
- AND substr($ttrim,-1,1)==">"\r
- AND stripos($ttrim,"</html>")!==false){\r
+ AND substr($ttrim,-1,1)==">"\r
+ AND stripos($ttrim,"</html>")!==false){\r
\r
if(!strlen($sujet)){\r
// dans ce cas on ruse un peu : extraire le sujet du title\r
$message_texte = nettoyer_caracteres_mail($corps);\r
}\r
$headers = array_map('trim',explode("\n",$headers));\r
+ $headers = array_filter($headers);\r
}\r
$sujet = nettoyer_titre_email($sujet);\r
\r
// 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
if (is_array($destinataire))\r
$destinataire = implode(", ",$destinataire);\r
- $destinataire = array_map('trim',explode(",",$destinataire));\r
- \r
+\r
+ if(strlen($destinataire) > 0)\r
+ $destinataire = array_map('trim',explode(",",$destinataire));\r
+ else {\r
+ spip_log("Aucune adresse email de destination valable pour l'envoi du courriel.", 'mail.' . _LOG_ERREUR);\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
\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.");\r
+ spip_log("Meta email_envoi invalide. Le mail sera probablement vu comme spam.", 'mail.' . _LOG_ERREUR);\r
$from = $destinataire;\r
}\r
- }\r
+ } \r
\r
// "Marie Toto <Marie@toto.com>"\r
if (preg_match(",^([^<>\"]*)<([^<>\"]+)>$,i",$from,$m)){\r
$facteur->AddBCC($bcc);\r
}\r
\r
- // S'il y a des copies cachées à envoyer\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->Sender = $adresse_erreur;\r
\r
// si entetes personalises : les ajouter\r
- // bug : semble ecraser les autres headers. A debug si on veut le rendre fonctionnel\r
- //if (!empty($headers)) {\r
- // foreach($headers as $h)\r
- // $facteur->AddCustomHeader($h);\r
- //}\r
+ // attention aux collisions : si on utilise l'option cc de $corps\r
+ // et qu'on envoie en meme temps un header Cc: xxx, yyy\r
+ // on aura 2 lignes Cc: dans les headers\r
+ if (!empty($headers)) {\r
+ foreach($headers as $h){\r
+ // verifions le format correct : il faut au moins un ":" dans le header\r
+ // et on filtre le Content-Type: qui sera de toute facon fourni par facteur\r
+ if (strpos($h,":")!==false\r
+ AND strncmp($h,"Content-Type:",13)!==0)\r
+ $facteur->AddCustomHeader($h);\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
$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');\r
+ spip_log("mail via facteur\n$head"."Destinataire:".print_r($destinataire,true),'mail.' . _LOG_ERREUR);\r
spip_log("mail\n$head"."Destinataire:".print_r($destinataire,true),'facteur');\r
$retour = $facteur->Send();\r
\r