Changeset 58940 in spip-zone


Ignore:
Timestamp:
Feb 29, 2012, 7:25:13 PM (9 years ago)
Author:
cedric@…
Message:

Standardiser envoyer_mail comme le core et facteur (prise en compte du $corps au format array)

File:
1 edited

Legend:

Unmodified
Added
Removed
  • _plugins_/mailjet/mailjet/envoyer_mail.php

    r58937 r58940  
    1111
    1212
    13 // http://doc.spip.org/@envoyer_mail
    14 function mailjet_envoyer_mail($email, $sujet, $texte, $from = "", $headers = "") {
     13/**
     14 * @param string $destinataire
     15 * @param string $sujet
     16 * @param string|array $corps
     17 *   au format string, c'est un corps d'email au format texte, comme supporte nativement par le core
     18 *   au format array, c'est un corps etendu qui peut contenir
     19 *     string texte : le corps d'email au format texte
     20 *     string html : le corps d'email au format html
     21 *     string from : email de l'envoyeur (prioritaire sur argument $from de premier niveau, deprecie)
     22 *     string nom_envoyeur : un nom d'envoyeur pour completer l'email from
     23 *     string cc : destinataires en copie conforme
     24 *     string bcc : destinataires en copie conforme cachee
     25 *     string|array repondre_a : une ou plusieurs adresses à qui répondre
     26 *     string adresse_erreur : addresse de retour en cas d'erreur d'envoi
     27 *     array pieces_jointes : listes de pieces a embarquer dans l'email, chacune au format array :
     28 *       string chemin : chemin file system pour trouver le fichier a embarquer
     29 *       string nom : nom du document tel qu'apparaissant dans l'email
     30 *       string encodage : encodage a utiliser, parmi 'base64', '7bit', '8bit', 'binary', 'quoted-printable'
     31 *       string mime : mime type du document
     32 *     array headers : tableau d'en-tetes personalises, une entree par ligne d'en-tete
     33 * @param string $from (deprecie, utiliser l'entree from de $corps)
     34 * @param string $headers (deprecie, utiliser l'entree headers de $corps)
     35 * @return bool
     36 */
     37function mailjet_envoyer_mail($destinataire, $sujet, $corps, $from = "", $headers = "") {
     38        $message_html   = '';
     39        $message_texte  = '';
     40
     41        if (!email_valide($destinataire)) return false;
     42        if ($destinataire == _T('info_mail_fournisseur')) return false;
     43
     44        // si $corps est un tableau -> fonctionnalites etendues
     45        // avec entrees possible : html, texte, pieces_jointes, nom_envoyeur, ...
     46        if (is_array($corps)) {
     47                $message_html   = $corps['html'];
     48                $message_texte  = nettoyer_caracteres_mail($corps['texte']);
     49                $pieces_jointes = $corps['pieces_jointes'];
     50                $nom_envoyeur = $corps['nom_envoyeur'];
     51                $from = (isset($corps['from'])?$corps['from']:$from);
     52                $cc = $corps['cc'];
     53                $bcc = $corps['bcc'];
     54                $repondre_a = $corps['repondre_a'];
     55                $adresse_erreur = $corps['adresse_erreur'];
     56                $headers = (isset($corps['headers'])?$corps['headers']:$headers);
     57                if (is_string($headers))
     58                        $headers = array_map('trim',explode("\n",$headers));
     59        }
     60        // si $corps est une chaine -> compat avec la fonction native SPIP
     61        // gerer le cas ou le corps est du html avec un Content-Type: text/html dans les headers
     62        else {
     63                if (preg_match(',Content-Type:\s*text/html,ims',$headers)){
     64                        $message_html   = $corps;
     65                }
     66                else {
     67                        $message_texte  = nettoyer_caracteres_mail($corps);
     68                }
     69                $headers = array_map('trim',explode("\n",$headers));
     70        }
     71        $sujet = nettoyer_titre_email($sujet);
    1572
    1673        include_spip('inc/charsets');
     
    2582        $mailer->WordWrap=70;
    2683
    27 
    28         if (!email_valide($email)) return false;
    29         if ($email == _T('info_mail_fournisseur')) return false;
    30 
    3184        if (strlen($headers)){
    3285                if ($headers = trim($headers)) $headers .= "\n";
     
    3487        }
    3588
    36     $mailer->AddCustomHeader('X-Mailer: Mailjet-for-Spip/1.0');
     89  $mailer->AddCustomHeader('X-Mailer: Mailjet-for-Spip/1.0');
    3790
    38         if (!$from) {
    39                 $email_envoi = $GLOBALS['meta']["email_webmaster"];
    40                 $mailer->From = email_valide($email_envoi) ? $email_envoi : $email;
    41         } else {
     91        // On ajoute le courriel de l'envoyeur s'il est fournit par la fonction
     92        if (empty($from)) {
     93                $from = $GLOBALS['meta']["email_envoi"];
     94                if (empty($from) OR !email_valide($from)) {
     95                        spip_log("Meta email_envoi invalide. Le mail sera probablement vu comme spam.");
     96                        $from = $destinataire;
     97                }
     98        }
     99        if (!empty($from)){
    42100                $mailer->From = $from;
    43                 $mailer->AddReplyTo($from);
     101                // la valeur par défaut de la config n'est probablement pas valable pour ce mail,
     102                // on l'écrase pour cet envoi
     103                $mailer->FromName = $from;
    44104        }
    45         $mailer->FromName = $mailer->From;
    46105
    47         spip_log("mail ($email): $sujet". ($from ?", from <$from>":''));
     106        // On ajoute le nom de l'envoyeur s'il fait partie des options
     107        if ($nom_envoyeur)
     108                $mailer->FromName = $nom_envoyeur;
    48109
    49         $mailer->AddAddress($email);
     110        // S'il y a des copies à envoyer
     111        if ($cc){
     112                if (is_array($cc))
     113                        foreach ($cc as $courriel)
     114                                $mailer->AddCC($courriel);
     115                else
     116                        $mailer->AddCC($cc);
     117        }
     118
     119        // S'il y a des copies cachées à envoyer
     120        if ($bcc){
     121                if (is_array($bcc))
     122                        foreach ($bcc as $courriel)
     123                                $mailer->AddBCC($courriel);
     124                else
     125                        $mailer->AddBCC($bcc);
     126        }
     127
     128        // S'il y a des copies cachées à envoyer
     129        if ($repondre_a){
     130                if (is_array($repondre_a))
     131                        foreach ($repondre_a as $courriel)
     132                                $mailer->AddReplyTo($courriel);
     133                else
     134                        $mailer->AddReplyTo($repondre_a);
     135        }
     136
     137
     138        // plusieurs destinataires peuvent etre fournis separes par des virgules
     139        // c'est un format standard dans l'envoi de mail
     140        // les passer au format array pour phpMailer
     141        // mais ne pas casser si on a deja un array en entree
     142        if (is_array($destinataire))
     143                $destinataire = implode(", ",$destinataire);
     144
     145        $destinataire = array_map('trim',explode(",",$destinataire));
     146        $mailer->AddAddress($destinataire);
    50147
    51148        $charset = $GLOBALS['meta']['charset'];
    52149        $content_type = "text/plain";
    53150
    54     if (preg_match(",Content-Type: ([^;]*); charset=(.*),i",$headers,$regs))
    55         {
     151  if (preg_match(",Content-Type: ([^;]*); charset=(.*),i",$headers,$regs)){
    56152                $charset = $regs[2];
    57153                $content_type = $regs[1];
    58154        }
    59155
    60     $mailer->CharSet = $charset;
     156  $mailer->CharSet = $charset;
    61157        $mailer->ContentType = $content_type;
    62158
    63         $texte = nettoyer_caracteres_mail($texte);
    64         $sujet = nettoyer_caracteres_mail($sujet);
     159        // On génère les headers
     160        $head = $mailer->CreateHeader();
    65161
    66         if (init_mb_string())
    67         {
     162        if (init_mb_string()){
    68163                mb_internal_encoding($charset);
    69164                $sujet = mb_encode_mimeheader($sujet, $charset, 'Q', "\n");
    70165                mb_internal_encoding('utf-8');
    71166        }
     167        $mailer->Subject = $sujet;
    72168
    73         $mailer->Body = $texte;
    74         $mailer->Subject = $sujet;
     169        if (!empty($message_html)) {
     170                $message_html = unicode_to_utf_8(charset2unicode($message_html,$GLOBALS['meta']['charset']));
     171                $mailer->Body = $message_html;
     172                $mailer->IsHTML(true);
     173        }
     174        if (!empty($message_texte)) {
     175                $message_texte = unicode_to_utf_8(charset2unicode($message_texte,$GLOBALS['meta']['charset']));
     176                if (!$this->Body) {
     177                        $mailer->IsHTML(false);
     178                        $mailer->Body = $message_texte;
     179                }
     180                else {
     181                        $mailer->AltBody = $message_texte;
     182                }
     183        }
     184
     185        // Et c'est parti on envoie enfin
     186        spip_log("mail via mailjet\n$head"."Destinataire:".print_r($destinataire,true),'mail');
     187        spip_log("mail\n$head"."Destinataire:".print_r($destinataire,true),'mailjet');
    75188
    76189        return $mailer->Send();
Note: See TracChangeset for help on using the changeset viewer.