API Newsletter

L’API Newsletter se décompose en 3 modules subscribe, compose et send qui correspondent aux 3 grandes fonctionnalités qui constituent la gestion de Newsletter.

subscribe

Un exemple d’implémentation est fourni par le plugin Mailsubscribers

newsletter/subscribe

Inscrit un subscriber par son email. Si le subscriber existe deja, on met a jour les informations (nom, listes, lang). L’ajout d’une inscription a une liste est cumulatif : si on appelle plusieurs fois la fonction avec le même email et plusieurs listes différentes, l’inscrit sera sur chaque liste.
Pour retirer un mail d’une liste, il faut le désinscrire.

Quand aucune liste n’est indiquée :

  • si l’email n’est inscrit a rien, on l’inscrit a la liste générale newsletter
  • si l’email est déjà inscrit, on ne change pas ses inscriptions, mais on modifie ses informations (nom,lang)
$subscribe = charger_fonction("subscribe","newsletter");
$subscribe($email, $options);
 * @param $email
 *   champ obligatoire
 * @param array $options
 *   nom : string
 *   listes : array (si non fourni, inscrit a la liste generale 'newsletter')
 *   lang : string
 *   force : bool permet de forcer une inscription sans doubleoptin (passe direct en valide)
 *   graceful : bool permet a contrario de ne pas inscrire quelqu'un qui s'est desabonne (utilise lors de l'import en nombre, l'utilisateur est ignore dans ce cas)
 * @return bool
 *   true si inscrit comme demande, false sinon
 *
 *

newsletter/unsubscribe

Désinscrire un subscriber par son email. Si une ou plusieurs listes sont précisées, le subscriber est désinscrit de ces seules listes. Si il n’en reste aucune, le statut du subscriber est suspendu. Si aucune liste n’est précisée, le subscriber est désinscrit de toutes les listes newsletter.

$unsubscribe = charger_fonction("unsubscribe","newsletter");
$unsubscribe($email, $options);
 *
 * @param $email
 *   champ obligatoire
 * @param array $options
 *   listes : array
 * @return bool
 *   true si inscrit, false sinon

newsletter/subscriber

Décrit les informations d’un inscrit. Pour retirer une liste il faut utiliser unsubscribe.

$subscriber = charger_fonction("subscriber","newsletter");
$subscriber($email);
 *
 * @param $email
 *   champ obligatoire
 * @return bool|array
 *   false si n'existe pas
 *   array :
 *     string email
 *     string nom
 *     array listes
 *     string lang
 *     string status : on|pending|off
 *     string url_unsubscribe : url de desabonnement
 */

newsletter/subscribers

Renvoie les inscrits à une ou plusieurs listes. Si plusieurs listes sont demandées, c’est un OU qui s’applique (renvoie les inscrits à au moins une des listes). Les options count et limit permettent de faire un simple comptage ou de ne récupérer qu’une portion de la liste.

$subscribers = charger_fonction("subscribers","newsletter");
$inscrits = $subscribers($listes,$options);
 *
 * @param array $listes
 *   listes de diffusion. 'newsletter' si non precise
 * @param array $options
 *   count : si true renvoyer le nombre de resultats au lieu de la liste (perf issue, permet de tronconner)
 *   limit : ne recuperer qu'un sous ensemble des inscrits "10,20" pour recuperer 20 resultats a partir du 10e (idem SQL)
 * @return int|array
 *   liste d'utilisateurs, chacun decrit par un array dans le meme format que newsletter/subscriber

newsletter/lists

Renvoie les listes de diffusion disponibles avec leurs statuts (open,close,?).

$lists = charger_fonction("lists","newsletter");
$inscrits = $lists($options);
 *
 * @param array $options
 *   status : filtrer les listes sur le status
 * @return array
 *   listes
 *   chaque liste est decrite par :
 *   id => array(titre=>'','status'=>'')

#FORMULAIRE_NEWSLETTER_SUBSCRIBE

Permet d’insérer dans une page un formulaire d’inscription à la newsletter, ou à une ou plusieurs autres listes passées en argument.

#FORMULAIRE_NEWSLETTER_SUBSCRIBE

#FORMULAIRE_NEWSLETTER_SUBSCRIBE{nouveautes}

#FORMULAIRE_NEWSLETTER_SUBSCRIBE{newsletter,nouveautes}

#FORMULAIRE_NEWSLETTER_UNSUBSCRIBE

Permet d’insérer dans une page un formulaire de désinscription à la newsletter, ou à une ou plusieurs autres listes passées en argument.

#FORMULAIRE_NEWSLETTER_UNSUBSCRIBE

#FORMULAIRE_NEWSLETTER_UNSUBSCRIBE{nouveautes}

#FORMULAIRE_NEWSLETTER_UNSUBSCRIBE{newsletter,nouveautes}

compose

Un exemple d’implémentation est fourni par le plugin Newsletters

newsletter/content

Renvoyer le contenu d’une newsletter par son id (le format de l’id n’est pas imposé par l’API et peut être un entier ou une chaine. Il doit être cohérent avec celui passé à la fonction newsletter/send).

$content = charger_fonction("content","newsletter");
$lettre = $content($id);
 *
 * @param int|string $id
 * @return array|bool
 *   string sujet
 *   string html
 *   string texte

newsletter/contextualize

Contextualiser le contenu de l’infolettre en fonction des informations concernant le destinataire. La syntaxe des variables n’est pas imposée par l’API et dépend de l’implémentation par le plugin qui prend en charge cette partie de l’API.

$contextualize = charger_fonction("contextualize","newsletter");
$content2 = $contextualize($content, $context);
 * @param $content
 *   le contenu (html ou texte) de la newsletter
 * @param $context
 *   le contexte des variables
 * @return string
 */

send

Un exemple d’implémentation est fourni par le plugin Mailshot

newsletter/send

Envoie une infolettre à un destinataire. L’infolettre peut être fournie par son id (et la fonction utilisera newsletter/content pour récupérer son contenu détaillé, ou decrite explicitement par un tableau (de format homogène à ce que attend envoyer_mail).

L’argument $destinataire attendu est homogène à ce que fournit newsletter/subscriber.

Le contenu $corps de l’email sera contextualisé à l’aide du contenu de $destinataire au moyen de la fonction newsletter/contextualize

$send = charger_fonction("send","newsletter");
$res = $send($destinataire, $corps, $options);
 *
 * @param array $destinataire
 *   description du destinataire
 *     string email
 *     string nom
 *     array listes
 *     string lang
 *     string status : on|pending|off
 *     string url_unsubscribe : url de desabonnement
 *
 * @param array|string $corps
 *   string id de la newsletter
 *ou array contenu de la newsletter
 *     string sujet
 *     string html
 *     string texte
 *     string from : email de l'envoyeur
 *     string nom_envoyeur : un nom d'envoyeur pour compléter l'email from
 *     string cc : destinataires en copie conforme
 *     string bcc : destinataires en copie conforme cachee
 *     string|array repondre_a : une ou plusieurs adresses a qui repondre
 *
 * @param array $options
 *   options d'envoi
 *     bool test : mode test (ajoute un [TEST] dans le sujet
 *     string tracking_id
 *
 * @return string|int
 *   vide si ok, ou message d'erreur sinon

newsletter/bulkstart

Démarrer un envoi en nombre d’une info-lettre vers une ou plusieurs listes.

$bulkstart = charger_fonction("bulkstart","newsletter");
$res = $bulkstart($corps, $listes, $options);
 * 
 * @param string|array $corps
 *   string id de la newsletter a envoyer en lot
 *ou array contenu a envoyer
 *     string sujet
 *     string html
 *     string texte
 * @param array $listes
 *   listes a qui on envoie (1 ou ++)
 * @param array $options
 *   string statut : statut par defaut
 * @return int
 *   0 si echec ou id de l'envoi sinon

newsletter/feedback

Permet la prise en compte d’un évènement concernant un mail envoyé (tracking de l’ouverture, clic sur un lien, bounce...) pour mettre à jour le statut de l’envoi correspondant, ou désabonner un email qui n’est plus valide etc.

$feedback = charger_fonction("feedback","newsletter");
$feedback($quoi, $email, $tracking_id);

Le tracking_id correspond à celui qui a été fourni en option dans l’appel à newsletter/bulkstart.

 * 
 * @param string $quoi
 *   open : l'email a ete ouvert
 *   clic : un lien a ete clique
 *   soft_bounce : refus temporaire pour cause de boite mail pleine ou autre
 *   hard_bounce : adresse foireuse, refus definitif
 *   reject : email rejete
 *   spam : email taggue en spam
 * @param $email
 * @param $tracking_id

#FORMULAIRE_NEWSLETTER_SEND

Permet d’envoyer une info-lettres. L’identifiant de l’info-lettres est fourni en argument.
Il n’y a aucune contrainte sur cet identifiant, qui doit simplement être reconnu par la fonction newsletter/content à laquelle il sera passé.

Un second argument permet de préciser que l’envoi se fait en mode test uniquement (pour les info-lettres non finalisées par exemple). En mode test, le sujet du mail est préfixé par [TEST] et l’envoi en nombre n’est pas permis.

#FORMULAIRE_NEWSLETTER_SEND{#ID_NEWSLETTER}

[(#REM) En mode test : ]
#FORMULAIRE_NEWSLETTER_SEND{#ID_NEWSLETTER,' '}

Discussion

4 discussions

  • 4

    Bonjour
    je cherche une solution pour ne proposer dans l’espace public, via le formulaire d’inscription aux newsletters, qu’une seule des listes ouvertes disponibles dans la partie privée.

    J’ai un moment pensé que via cette balise, ce serait possible #FORMULAIRE_NEWSLETTER_SUBSCRIBE , mais je n’ai pas l’impression, à moins que je n’aie pas compris quelque chose.

    J’ai tenté de surcharger ce fichier (inc-check-subscribinglists.html) avec succès pour pouvoir sélectionner une seule liste avec son ID, mais il agit aussi dans l’espace privé, ce qui me pose un problème.

    Merci par avance pour vos propositions.
    Cordialement

    • Bonjour,
      Avec ce code dans un squelette en indiquant l’identifiant de la liste de diffusion à afficher (ici « news » par exemple).
      (avec « checklist » s’il y en a plus d’une)

       [(#FORMULAIRE_NEWSLETTER_SUBSCRIBE{"news","checklist"})]

      dd

    • Bonjour
      Merci pour la réponse,

      avec deux listes ouvertes sir j’utilise

      [(#FORMULAIRE_NEWSLETTER_SUBSCRIBE{"maliste"})]

      maliste apparaît cochée, mais l’autre apparait aussi. Hors, je ne voudrais qu’une des deux listes affichée.

      François-Marie

    • Ah,

      Je viens de revérifier et sur mon site j’ai le fonctionnement attendu :

      [(#FORMULAIRE_NEWSLETTER_SUBSCRIBE{"newstest,news","checklist"})]

      affiche les 2 listes de diffusion.

      et

      [(#FORMULAIRE_NEWSLETTER_SUBSCRIBE{"news","checklist"})]

      n’en affiche qu’une.

      Les deux sont publiées.

      Versions : MailSubscribers 3.3.0 / Newsletters 1.6.4 / SPIP 4.0.8

      dd

    • Moi toujours pareil je regarde après noël.
      Merci

    Répondre à ce message

  • Bonjour, où faut-il intervenir pour que le formulaire d’inscription #FORMULAIRE_NEWSLETTER_SUBSCRIBE provoque un affichage avec le champ pour l’adresse mail à remplir et le bouton à côté (tout sur la même ligne plutôt que sur des lignes différentes).

    Répondre à ce message

  • Bonjour,
    Y-a-t’il un moyen pour que le modèle
    #FORMULAIRE_NEWSLETTER_SUBSCRIBE
    dans un squelette liste toutes les listes de diffusion publiées et pas seulement la liste « newsletter » ?

    Actuellement si les listes de diffusion changent il faut modifier le squelette.

    Merci
    dd

    Répondre à ce message

  • 3

    entête list-unsubscribe
    J’ai des retours de personnes inscrites à des NL qui me disent que les envois arrivent dans les spams. Un test d’envoi vers mail-tester donne pourtant une note de 10/10
    cf : https://www.mail-tester.com/test-b42qb
    En essayant de creuser, il semblerait que les serveurs d’orange soient assez sévères avec les mails de masse ne disposant pas d’entête list-unsubscribe (RFC 2369). Mail-tester signalant l’absence de cet entête dans son rapport, je me demande s’il n’y aurait pas un petit truc à voir de ce côté-là...
    Une opinion ?
    Ça se tient/paramètre où cette histoire d’en-tête ? C’est à facteur/mailshot/newsletter de faire ça ? Pas à eux ?

    • Bonjour,

      Je serai aussi intéressé pour savoir comment intégrer la RFC 2369 concernant le list-unsubscribe lors des envois de newsletter svp.

    • Bonjour,

      Est-ce que quelqu’un aurait des pistes pour l’insertion de l’entête « List-Unsubscribe » svp ?

    • ça m’intéresse aussi !

    Répondre à ce message

Ajouter un commentaire

Avant de faire part d’un problème sur un plugin X, merci de lire ce qui suit :

  • Désactiver tous les plugins que vous ne voulez pas tester afin de vous assurer que le bug vient bien du plugin X. Cela vous évitera d’écrire sur le forum d’une contribution qui n’est finalement pas en cause.
  • Cherchez et notez les numéros de version de tout ce qui est en place au moment du test :
    • version de SPIP, en bas de la partie privée
    • version du plugin testé et des éventuels plugins nécessités
    • version de PHP (exec=info en partie privée)
    • version de MySQL / SQLite
  • Si votre problème concerne la partie publique de votre site, donnez une URL où le bug est visible, pour que les gens puissent voir par eux-mêmes.
  • En cas de page blanche, merci d’activer l’affichage des erreurs, et d’indiquer ensuite l’erreur qui apparaît.

Merci d’avance pour les personnes qui vous aideront !

Par ailleurs, n’oubliez pas que les contributeurs et contributrices ont une vie en dehors de SPIP.

Qui êtes-vous ?
[Se connecter]

Pour afficher votre trombine avec votre message, enregistrez-la d’abord sur gravatar.com (gratuit et indolore) et n’oubliez pas d’indiquer votre adresse e-mail ici.

Ajoutez votre commentaire ici

Ce champ accepte les raccourcis SPIP {{gras}} {italique} -*liste [texte->url] <quote> <code> et le code HTML <q> <del> <ins>. Pour créer des paragraphes, laissez simplement des lignes vides.

Ajouter un document

Suivre les commentaires : RSS 2.0 | Atom