Changeset 95492 in spip-zone


Ignore:
Timestamp:
Feb 25, 2016, 4:38:54 PM (3 years ago)
Author:
cedric@…
Message:

L'envoi sur mailjet en v3 se fait via l'API REST et non plus par l'API SMTP

Location:
_plugins_/mailshot/trunk
Files:
1 added
3 edited

Legend:

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

    r95487 r95492  
    3838        }
    3939
    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         // support des API v2 et v3 de Mailjet
     40        $api_version = 1;
    5041        if (isset($config['mailjet_api_version']) AND intval($config['mailjet_api_version'])>1){
    51                 $options['smtp']['host'] = "in-v".intval($config['mailjet_api_version']).".mailjet.com";
    52         }
    53 
    54         // on utilise une surcharge pour gerer le tracking
    55         $options['sender_class'] = "FacteurMailjet";
     42                $api_version = intval($config['mailjet_api_version']);
     43        }
     44
     45        if ($api_version==3){
     46                // on utilise l'API REST
     47                $options['sender_class'] = "FacteurMailjetv3";
     48        }
     49        else {
     50                // on passe par l'API SMTP basique
     51
     52                // on ecrase le smtp avec celui de mailjet
     53                $options['smtp'] = array(
     54                        "host" => "in.mailjet.com",
     55                        "port" => "587",
     56                        "auth" => "oui",
     57                        "username" => $config['mailjet_api_key'],
     58                        "password" => $config['mailjet_secret_key'],
     59                        "secure" => "non",
     60                );
     61                // support des API v2 et v3 de Mailjet
     62                if (isset($config['mailjet_api_version']) AND intval($config['mailjet_api_version'])>1){
     63                        $options['smtp']['host'] = "in-v".intval($config['mailjet_api_version']).".mailjet.com";
     64                }
     65
     66                // on utilise une surcharge pour gerer le tracking
     67                $options['sender_class'] = "FacteurMailjet";
     68        }
    5669        return $mailer_defaut($to_send,$options);
    5770}
     
    8699                $config = lire_config('mailshot/');
    87100
    88                 include_spip('lib/mailjet-api-php/mailjet-0.1');
     101                $api_version = 1;
     102                if (isset($config['mailjet_api_version']) AND intval($config['mailjet_api_version'])>1){
     103                        $api_version = intval($config['mailjet_api_version']);
     104                }
     105
     106                if ($api_version==3) {
     107                        include_spip('lib/mailjet-api-php/mailjet-3');
     108                }
     109                else {
     110                        include_spip('lib/mailjet-api-php/mailjet-0.1');
     111                }
    89112                $mj = new Mailjet($config['mailjet_api_key'],$config['mailjet_secret_key']);
    90113                $mj->debug = 0;
     
    154177}
    155178
     179
     180/**
     181 * Class FacteurMailjet
     182 * Utilise l'API SMTP valable dans toutes les versions d'API
     183 */
    156184class FacteurMailjet extends Facteur {
    157185
     
    178206        }
    179207}
     208
     209
     210/**
     211 * Utilise l'API REST en v3
     212 * Class FacteurMailjetv3
     213 */
     214class FacteurMailjetv3 extends Facteur {
     215
     216        protected $api_version = "v3/";
     217        public $send_options = array();
     218        protected $message = array(
     219                'FromEmail' => '',
     220          'FromName' => '',
     221    'Subject' => '',
     222    'Text-part' => '',
     223    'Html-part' => '',
     224    'Recipients' => array(
     225            /*array(
     226                    'Email' => '',
     227                    'Name' => '',
     228            )*/
     229    ),
     230    //'Mj-campaign' => '',
     231    //'Mj-deduplicatecampaign' => 1,
     232                //'Mj-CustomID' => '',
     233                'Headers' => array(
     234                        //'Reply-To' => 'copilot@mailjet.com',
     235                ),
     236        );
     237
     238        protected function cleanAdress($address, $name = ''){
     239                $address = trim($address);
     240    $name = trim(preg_replace('/[\r\n]+/', '', $name)); //Strip breaks and trim
     241                if (!self::ValidateAddress($address)) {
     242                        $this->SetError('invalid_address'.': '. $address);
     243                        return false;
     244          }
     245                return array($address,$name);
     246        }
     247
     248        /**
     249        * Adds a "To" address.
     250        * @param string $address
     251        * @param string $name
     252        * @return boolean true on success, false if address already used
     253        */
     254        public function AddAddress($address, $name = '') {
     255                if ($a = $this->cleanAdress($address,$name)){
     256                        $this->message['Recipients'][] = array('Email'=>$address,'Name'=>$name);
     257                        return true;
     258                }
     259                return false;
     260        }
     261
     262        /**
     263        * Adds a "Cc" address.
     264        * Note: this function works with the SMTP mailer on win32, not with the "mail" mailer.
     265        * @param string $address
     266        * @param string $name
     267        * @return boolean true on success, false if address already used
     268        */
     269        public function AddCC($address, $name = '') {
     270                return $this->AddAddress($address, $name);
     271        }
     272
     273        /**
     274        * Adds a "Bcc" address.
     275        * Note: this function works with the SMTP mailer on win32, not with the "mail" mailer.
     276        * @param string $address
     277        * @param string $name
     278        * @return boolean true on success, false if address already used
     279        */
     280        public function AddBCC($address, $name = '') {
     281                return $this->AddAddress($address, $name);
     282        }
     283
     284        /**
     285        * Adds a "Reply-to" address.
     286        * @param string $address
     287        * @param string $name
     288        * @return boolean
     289        */
     290        public function AddReplyTo($address, $name = '') {
     291                if ($a = $this->cleanAdress($address,$name)){
     292                        $this->message['Headers']['ReplyTo'] = $address;
     293                        return true;
     294                }
     295                return false;
     296        }
     297
     298        /**
     299        * Adds a custom header.
     300        * @access public
     301        * @return void
     302        */
     303        public function AddCustomHeader($name, $value = null) {
     304                if ($value === null) {
     305                        // Value passed in as name:value
     306                        list($name, $value) = explode(':', $name, 2);
     307                }
     308                $this->message['Headers'][$name] = trim($value);
     309        }
     310
     311        /**
     312         * utilise $this->send_options options d'envoi
     313         *     string tracking_id
     314         * @return bool
     315         */
     316        public function Send() {
     317
     318                $this->message['Html-part'] = $this->Body;
     319                $this->message['Text-part'] = $this->AltBody;
     320                $this->message['Subject'] = $this->Subject;
     321                $this->message['FromEmail'] = $this->From;
     322                $this->message['FromName'] = $this->FromName;
     323
     324                // ajouter le tracking_id en tag, pour retrouver le message apres webhook
     325                if (isset($this->send_options['tracking_id'])
     326                  AND $id = $this->send_options['tracking_id']){
     327                        //$this->message['track_opens'] = true;
     328                        //$this->message['track_clicks'] = true;
     329
     330                        // prefixer le tracking par l'url du site pour ne pas melanger les feedbacks
     331                        $this->message['Mj-campaign'] = protocole_implicite($GLOBALS['meta']['adresse_site'])."/#".$this->send_options['tracking_id'];
     332                        $this->message['Mj-deduplicatecampaign'] = 1;
     333                }
     334
     335                $mj = mailjet_api();
     336                include_spip('inc/json');
     337                $res = $mj->send(array('data'=>json_encode($this->message)));
     338                if (!$res){
     339                        $this->SetError($mj->_error);
     340                        return false;
     341                }
     342
     343                /*
     344                {
     345                    "ErrorInfo": "Bad Request",
     346                    "ErrorMessage": "Unknown resource: \"contacts\"",
     347                    "StatusCode": 400
     348                }
     349                */
     350
     351                // statut d'erreur au premier niveau ?
     352                if (isset($res['StatusCode'])
     353                  AND intval($res['StatusCode']/100)>2){
     354
     355                        $this->SetError("status ".$res['StatusCode']." - ".$res['ErrorInfo'].": ".$res['ErrorMessage']);
     356                        return false;
     357                }
     358
     359                // { "Sent" : [{ "Email" : "cedric@yterium.com", "MessageID" : 19140330729428381 }] }
     360                if (isset($res['Sent']) AND count($res['Sent'])){
     361                        return true;
     362                }
     363                // les autres type de reponse sont non documentees. On essaye au hasard…
     364                if (isset($res['Queued']) AND count($res['Queued'])){
     365                        return true;
     366                }
     367                if (isset($res['Invalid']) AND count($res['Invalid'])){
     368                        $this->SetError("invalid");
     369                        return false;
     370                }
     371                if (isset($res['Rejected']) AND count($res['Rejected'])){
     372                        $this->SetError("rejected");
     373                        return false;
     374                }
     375
     376                // Erreur inconnue
     377                $this->SetError("mailjetERROR ".var_export($res,true));
     378                spip_log("mailjet/send resultat inatendu : ".json_encode($res),"mailshot_errors"._LOG_ERREUR);
     379                return false;
     380        }
     381
     382        public function CreateHeader(){}
     383}
  • _plugins_/mailshot/trunk/lib/mailjet-api-php/mailjet-0.1.php

    r76468 r95492  
    1212class Mailjet {
    1313        var $version = '0.1';
     14        var $apiVersion = '0.1';
    1415
    1516        # Choose your weapon : php, json, xml, serialize, html, csv
     
    3132                if ($apiKey) $this->apiKey = $apiKey;
    3233                if ($secretKey) $this->secretKey = $secretKey;
    33                 $this->apiUrl = (($this->secure) ? 'https' : 'http') . '://api.mailjet.com/' . $this->version . '';
     34                $this->apiUrl = (($this->secure) ? 'https' : 'http') . '://api.mailjet.com/' . $this->apiVersion . '';
    3435        }
    3536
  • _plugins_/mailshot/trunk/paquet.xml

    r95487 r95492  
    22        prefix="mailshot"
    33        categorie="communication"
    4         version="1.12.0"
     4        version="1.13.0"
    55        etat="stable"
    66        compatibilite="[3.0.5;3.1.*]"
Note: See TracChangeset for help on using the changeset viewer.