Changeset 76468 in spip-zone


Ignore:
Timestamp:
Sep 24, 2013, 4:28:21 PM (6 years ago)
Author:
cedric@…
Message:

Prise en charge partielle de l'API mailjet : la configuration se fait simplement par l'API key et la Secret Key de Mailjet.
L'envoi est bien regroupé en campagnes mailjets dans l'interface de Mailjet, mais pour le moment on ne sait pas récupérer les feedback de maniere satsifaisante pour desabonner automatiquement.

Location:
_plugins_/mailshot/trunk
Files:
2 added
4 edited
1 copied

Legend:

Unmodified
Added
Removed
  • _plugins_/mailshot/trunk/bulkmailer/mailjet.php

    r76457 r76468  
    3030 * @return Facteur
    3131 */
    32 function &bulkmailer_smtp_dist($to_send,$options=array()){
     32function &bulkmailer_mailjet_dist($to_send,$options=array()){
    3333        static $config = null;
    3434        static $mailer_defaut;
     
    3838        }
    3939
    40         // on ecrase le smtp avec celui de la config
    41         $options['smtp'] = $config['smtp'];
     40        // on ecrase le smtp avec celui de mailjet
     41        $options['smtp'] = array(
     42                "host" => "in.mailjet.com",
     43                "port" => "587",
     44                "auth" => "oui",
     45                "username" => $config['mailjet_api_key'],
     46                "password" => $config['mailjet_secret_key'],
     47                "secure" => "non",
     48        );
     49
     50        // on utilise une surcharge pour gerer le tracking
     51        $options['sender_class'] = "FacteurMailjet";
    4252        return $mailer_defaut($to_send,$options);
     53}
     54
     55function &mailjet_api(){
     56        static $mj = null;
     57        if (is_null($mj)){
     58                include_spip('inc/config');
     59                $config = lire_config('mailshot');
     60
     61                include_spip('lib/mailjet-api-php/mailjet-0.1');
     62                $mj = new Mailjet($config['mailjet_api_key'],$config['mailjet_secret_key']);
     63                $mj->debug = 0;
     64        }
     65
     66        return $mj;
     67}
     68
     69function mailjet_sender_status($sender_email){
     70
     71        $mj = mailjet_api();
     72        $res = (array)$mj->userSenderlist();
     73        if (!isset($res['status']) OR $res['status']!=='OK') return null;
     74
     75        foreach($res['senders'] as $sender){
     76                if ($sender->email == $sender_email){
     77                        if ($sender->enabled>0)
     78                                return "active";
     79                        else
     80                                return "pending";
     81                }
     82        }
     83
     84        return false;
     85}
     86
     87/**
     88 * Verifier si un email d'envoi est dans la liste des senders mailjet
     89 * et sinon l'ajoute
     90 *
     91 * @param string $sender_email
     92 * @param bool $force
     93 * @return bool
     94 */
     95function mailjet_add_sender($sender_email, $force = false){
     96
     97        $status = mailjet_sender_status($sender_email);
     98
     99        if ($status=="active") return $status; // active
     100        if ($status AND !$force) return $status; // pending
     101
     102        // si le sender n'est pas dans la liste ou en attente
     103        $mj = mailjet_api();
     104
     105        // ajouter un sender
     106        $params = array(
     107                'method' => 'POST',
     108                'email' => $sender_email,
     109        );
     110
     111        $res = (array)$mj->userSenderadd($params);
     112        if (!isset($res['status']) OR $res['status']!=='OK') return null;
     113        return mailjet_sender_status($sender_email);
    43114
    44115}
     116
     117
     118class FacteurMailjet extends Facteur {
     119
     120        public $send_options = array();
     121
     122        /**
     123         * utilise $this->send_options options d'envoi
     124         *     string tracking_id
     125         * @return bool
     126         */
     127        public function Send() {
     128                if (isset($this->send_options['tracking_id'])
     129                  AND $id = $this->send_options['tracking_id']){
     130
     131                        $campaign = protocole_implicite($GLOBALS['meta']['adresse_site'])."/#".$this->send_options['tracking_id'];
     132                        $this->AddCustomHeader("X-mailjet-campaign: $campaign");
     133                        $this->AddCustomHeader("X-Mailjet-DeduplicateCampaign: true");
     134                        $this->AddCustomHeader("X-Mailjet-TrackOpen: true");
     135                        $this->AddCustomHeader("X-Mailjet-TrackClick: true");
     136                }
     137
     138                return parent::Send();
     139        }
     140}
  • _plugins_/mailshot/trunk/formulaires/configurer_mailshot.html

    r72128 r76468  
    9393                                                        <ul class="suite">
    9494                                                                #SET{name,mandrill_api_key}#SET{obli,''}#SET{defaut,''}#SET{erreurs,#ENV**{erreurs}|table_valeur{#GET{name}}}
     95                                                                <li class="editer gauche editer_[(#GET{name})][ (#GET{obli})][ (#GET{erreurs}|oui)erreur]">
     96                                                                        <label for="#GET{name}">[(#GET{fl}|concat{':label_',#GET{name}}|_T)]</label>[
     97                                                                        <span class='erreur_message'>(#GET{erreurs})</span>
     98                                                                        ]<input type="text" name="#GET{name}" class="text" value="#ENV*{#GET{name},#GET{defaut}}" id="#GET{name}" [(#HTML5|et{#GET{obli}})required='required']/>
     99                                                                </li>
     100                                                        </ul>
     101                                                        <div class="choix">
     102                                                                <input type="radio" name="mailer" class="radio" value="mailjet" id="mailer_mailjet"[(#ENV{mailer,'defaut'}|=={mailjet}|oui)checked="checked"]/>
     103                                                                <label for="mailer_mailjet"><:mailshot:label_mailer_mailjet:></label>
     104                                                                <a href="http://www.mailjet.com/">http://www.mailjet.com/</a>
     105                                                        </div>
     106                                                        <ul class="suite">
     107                                                                #SET{name,mailjet_api_key}#SET{obli,''}#SET{defaut,''}#SET{erreurs,#ENV**{erreurs}|table_valeur{#GET{name}}}
     108                                                                <li class="editer gauche editer_[(#GET{name})][ (#GET{obli})][ (#GET{erreurs}|oui)erreur]">
     109                                                                        <label for="#GET{name}">[(#GET{fl}|concat{':label_',#GET{name}}|_T)]</label>[
     110                                                                        <span class='erreur_message'>(#GET{erreurs})</span>
     111                                                                        ]<input type="text" name="#GET{name}" class="text" value="#ENV*{#GET{name},#GET{defaut}}" id="#GET{name}" [(#HTML5|et{#GET{obli}})required='required']/>
     112                                                                </li>
     113                                                                #SET{name,mailjet_secret_key}#SET{obli,''}#SET{defaut,''}#SET{erreurs,#ENV**{erreurs}|table_valeur{#GET{name}}}
    95114                                                                <li class="editer gauche editer_[(#GET{name})][ (#GET{obli})][ (#GET{erreurs}|oui)erreur]">
    96115                                                                        <label for="#GET{name}">[(#GET{fl}|concat{':label_',#GET{name}}|_T)]</label>[
  • _plugins_/mailshot/trunk/lang/mailshot_fr.php

    r72128 r76468  
    6262        'label_mailer_smtp' => 'Serveur SMTP',
    6363        'label_mailer_mandrill' => 'Service Mandrill',
     64        'label_mailer_mailjet' => 'Service Mailjet',
    6465        'label_mandrill_api_key' => 'Mandrill API Key',
     66        'label_mailjet_api_key' => 'Clé API Mailjet',
     67        'label_mailjet_secret_key' => 'Clé secrète Mailjet',
    6568        'label_control_pause' => 'Pause',
    6669        'label_control_play' => 'Relancer',
  • _plugins_/mailshot/trunk/mailshot_pipelines.php

    r75290 r76468  
    8989        return $flux;
    9090}
     91
     92/**
     93 * Appeler une fonction de configuration pour le mailer selectionne
     94 * si elle existe
     95 *
     96 * @param array $flux
     97 * @return array
     98 */
     99function mailshot_formulaire_traiter($flux){
     100        if ($flux['args']['form']=='configurer_mailshot'){
     101                $config = lire_config("mailshot/");
     102                if ($mailer = $config['mailer']
     103                  AND include_spip("bulkmailer/$mailer")
     104                  AND $config = charger_fonction($mailer."_config","bulkmailer",true)){
     105                        $config();
     106                }
     107        }
     108        return $flux;
     109}
    91110?>
  • _plugins_/mailshot/trunk/paquet.xml

    r76411 r76468  
    22        prefix="mailshot"
    33        categorie="communication"
    4         version="1.5.10"
     4        version="1.6.0"
    55        etat="stable"
    66        compatibilite="[3.0.5;3.0.*]"
     
    2424        <pipeline nom="pre_edition" inclure="mailshot_pipelines.php" />
    2525        <pipeline nom="post_edition" inclure="mailshot_pipelines.php" />
     26        <pipeline nom="formulaire_traiter" inclure="mailshot_pipelines.php" />
    2627
    2728
Note: See TracChangeset for help on using the changeset viewer.