Changeset 58921 in spip-zone


Ignore:
Timestamp:
Feb 29, 2012, 11:32:33 AM (8 years ago)
Author:
cedric@…
Message:

Eviter de dupliquer le code du core de SPIP et correction d'une coquille sur $text qui empechait le retour a la fonction native de SPIP malgré ce qu'annonce le formulaire de configuration de mailjet

Location:
_plugins_/mj_customsmtp
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • _plugins_/mj_customsmtp/inc/envoyer_mail.php

    r57817 r58921  
    11<?php
    2 
    3 /***************************************************************************\
    4  *  SPIP, Systeme de publication pour l'internet                           *
    5  *                                                                         *
    6  *  Copyright (c) 2001-2006                                                *
    7  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
    8  *                                                                         *
    9  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
    10  *  Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne.   *
    11 \***************************************************************************/
     2/*
     3 * Plugin Mailjet
     4 *
     5 */
    126
    137if (!defined("_ECRIRE_INC_VERSION")) return;
    148
    15 // http://doc.spip.org/@nettoyer_caracteres_mail
    16 function nettoyer_caracteres_mail($t) {
    179
    18         $t = filtrer_entites($t);
     10include_spip('classes/facteur');
     11// inclure le fichier natif de SPIP, pour les fonctions annexes
     12include_once _DIR_RESTREINT."inc/envoyer_mail.php";
    1913
    20         if ($GLOBALS['meta']['charset'] <> 'utf-8') {
    21                 $t = str_replace(
    22                         array("&#8217;","&#8220;","&#8221;"),
    23                         array("'",      '"',      '"'),
    24                 $t);
    25         }
    26 
    27         $t = str_replace(
    28                 array("&mdash;", "&endash;"),
    29                 array("--","-" ),
    30         $t);
    31 
    32         return $t;
    33 }
    34 
    35 function mail_normaliser_headers($headers, $from, $to, $texte, $parts="")
    36 {
    37     $charset = $GLOBALS['meta']['charset'];
    38 
    39     // Ajouter le Content-Type et consort s'il n'y est pas deja
    40     if (strpos($headers, "Content-Type: ") === false)
    41         $type =
    42         "Content-Type: text/plain;charset=\"$charset\";\n".
    43         "Content-Transfer-Encoding: 8bit\n";
    44     else $type = '';
    45 
    46     // calculer un identifiant unique
    47     preg_match('/@\S+/', $from, $domain);
    48     $uniq = rand() . '_' . md5($to . $texte) . $domain[0];
    49 
    50     // Si multi-part, s'en servir comme borne ...
    51     if ($parts) {
    52         $texte = "--$uniq\n$type\n" . $texte ."\n";
    53         foreach ($parts as $part) {
    54             $n = strlen($part[1]) . ($part[0] ? "\n" : '');
    55             $e = join("\n", $part[0]);
    56             $texte .= "\n--$uniq\nContent-Length: $n$e\n\n" . $part[1];
    57         }
    58         $texte .= "\n\n--$uniq--\n";
    59         // Si boundary n'est pas entre guillemets,
    60         // elle est comprise mais le charset est ignoree !
    61         $type = "Content-Type: multipart/mixed; boundary=\"$uniq\"\n";
    62     }
    63 
    64     // .. et s'en servir pour plaire a SpamAssassin
    65 
    66     $mid = 'Message-Id: <' . $uniq . ">";
    67 
    68     // indispensable pour les sites qui collent d'office From: serveur-http
    69     // sauf si deja mis par l'envoyeur
    70     $rep = (strpos($headers,"Reply-To:")!==FALSE) ? '' : "Reply-To: $from\n";
    71 
    72     // Nettoyer les en-tetes envoyees
    73     if (strlen($headers)) $headers = trim($headers)."\n";
    74 
    75     // Et mentionner l'indeboulonable nomenclature ratee
    76 
    77     $headers .= "From: $from\n$type$rep$mid\nMIME-Version: 1.0\n";
    78 
    79     return array($headers, $texte);
    80 }
    81 
    82 if (!function_exists('nettoyer_titre_email')){
    83         // http://doc.spip.org/@nettoyer_titre_email
    84         function nettoyer_titre_email($titre) {
    85                 return str_replace("\n", ' ', supprimer_tags(extraire_multi($titre)));
    86         }
    87 }
    8814
    8915// http://doc.spip.org/@envoyer_mail
    90 function inc_envoyer_mail_dist($email, $sujet, $texte, $from = "", $headers = "") {
     16function inc_envoyer_mail($email, $sujet, $texte, $from = "", $headers = "") {
    9117
    92     if (! $GLOBALS['meta'] ['mj_customsmtp_enabled'])
    93     {
    94         return mj_customsmtp_envoyer_mail_original ($email, $sujet, $text, $from, $headers);
    95     }
     18  if (! $GLOBALS['meta'] ['mj_customsmtp_enabled']){
     19                return inc_envoyer_mail_dist($email, $sujet, $texte, $from, $headers);
     20        }
    9621
    9722        include_spip('inc/charsets');
     
    15883}
    15984
    160 function mj_customsmtp_envoyer_mail_original ($destinataire, $sujet, $corps, $from = "", $headers = "") {
    161 
    162     if (!email_valide($destinataire)) return false;
    163     if ($destinataire == _T('info_mail_fournisseur')) return false; // tres fort
    164     global $hebergeur, $queue_mails;
    165 
    166     // Fournir si possible un Message-Id: conforme au RFC1036,
    167     // sinon SpamAssassin denoncera un MSGID_FROM_MTA_HEADER
    168 
    169     $email_envoi = $GLOBALS['meta']["email_webmaster"];
    170     if (!email_valide($email_envoi)) {
    171         spip_log("Meta email_envoi invalide. Le mail sera probablement vu comme spam.");
    172         $email_envoi = $destinataire;
    173     }
    174 
    175     if (is_array($corps)){
    176         $texte = $corps['texte'];
    177         $from = (isset($corps['from'])?$corps['from']:$from);
    178         $headers = (isset($corps['headers'])?$corps['headers']:$headers);
    179         if (is_array($headers))
    180             $headers = implode("\n",$headers);
    181         $parts = "";
    182         if ($corps['pieces_jointes'] AND function_exists('mail_embarquer_pieces_jointes'))
    183             $parts = mail_embarquer_pieces_jointes($corps['pieces_jointes']);
    184     } else
    185         $texte = $corps;
    186 
    187     if (!$from) $from = $email_envoi;
    188 
    189     // ceci est la RegExp NO_REAL_NAME faisant hurler SpamAssassin
    190     if (preg_match('/^["\s]*\<?\S+\@\S+\>?\s*$/', $from))
    191         $from .= ' (' . str_replace(')','', translitteration(str_replace('@', ' at ', $from))) . ')';
    192 
    193     // nettoyer les &eacute; &#8217, &emdash; etc...
    194     // les 'cliquer ici' etc sont a eviter;  voir:
    195     // http://mta.org.ua/spamassassin-2.55/stuff/wiki.CustomRulesets/20050914/rules/french_rules.cf
    196     $texte = nettoyer_caracteres_mail($texte);
    197     $sujet = nettoyer_caracteres_mail($sujet);
    198 
    199     // encoder le sujet si possible selon la RFC
    200     if (init_mb_string()) {
    201         # un bug de mb_string casse mb_encode_mimeheader si l'encoding interne
    202         # est UTF-8 et le charset iso-8859-1 (constate php5-mac ; php4.3-debian)
    203         $charset = $GLOBALS['meta']['charset'];
    204         mb_internal_encoding($charset);
    205         $sujet = mb_encode_mimeheader($sujet, $charset, 'Q', "\n");
    206         mb_internal_encoding('utf-8');
    207     }
    208 
    209     if (function_exists('wordwrap') && (preg_match(',multipart/mixed,',$headers) == 0))
    210         $texte = wordwrap($texte);
    211 
    212     list($headers, $texte) = mail_normaliser_headers($headers, $from, $destinataire, $texte, $parts);
    213 
    214     if (_OS_SERVEUR == 'windows') {
    215         $texte = preg_replace ("@\r*\n@","\r\n", $texte);
    216         $headers = preg_replace ("@\r*\n@","\r\n", $headers);
    217         $sujet = preg_replace ("@\r*\n@","\r\n", $sujet);
    218     }
    219 
    220     spip_log("mail $destinataire\n$sujet\n$headers",'mails');
    221     // mode TEST : forcer l'email
    222     if (defined('_TEST_EMAIL_DEST')) {
    223         if (!_TEST_EMAIL_DEST)
    224             return false;
    225         else
    226             $destinataire = _TEST_EMAIL_DEST;
    227     }
    228 
    229     switch($hebergeur) {
    230         case 'lycos':
    231             $queue_mails[] = array(
    232                 'email' => $destinataire,
    233                 'sujet' => $sujet,
    234                 'texte' => $texte,
    235                 'headers' => $headers);
    236             return true;
    237         case 'free':
    238             return false;
    239         default:
    240             return @mail($destinataire, $sujet, $texte, $headers);
    241     }
    242 }
    243 
    24485?>
  • _plugins_/mj_customsmtp/plugin.xml

    r58029 r58921  
    33        <slogan>Publipostage via Mailjet</slogan>
    44        <auteur>Mailjet SAS</auteur>
    5         <version>1.0.0</version>
     5        <version>1.0.1</version>
    66        <etat>stable</etat>
    77        <description>Envoyez vos emails via l'API [Mailjet->http://www.mailjet.com]</description>
Note: See TracChangeset for help on using the changeset viewer.