Mailshot

Ce plugin prend en charge l’envoi en nombre d’info-lettres par email.

Mailshot permet l’envoi en nombre d’emails au moyen d’un SMTP (ou d’un service externe) dédié à cet effet. Il permet de limiter la cadence d’envoi.

Enfin, ce plugin implémente la partie send de l’API Newsletter et peut donc être utilisé avec les plugins Mailsubscribers et Newsletters pour l’envoi de Newsletters.

La question du SPAM

Avant de décrire en détail le fonctionnement du plugin, il est important de souligner que l’envoi de mails en nombre est rendu de plus en plus difficile en raison de la prédominance du SPAM. Plus de 95% des emails qui circulent sur les serveurs de courriers sont du SPAM. Les opérateurs de mails (FAI, gmail...) sont donc de plus en plus stricts dans les règles de filtrage.

En tant qu’éditeur de contenu et utilisateur de ce plugin, vous avez une responsabilité : n’envoyer du contenu qu’à des utilisateurs qui l’ont sollicité par une demande explicite. Lorsque vous ne respectez pas cette règle, vous envoyez des emails non sollicités, c’est à dire du SPAM. Et vous contribuez à renforcer les règles de filtrage des opérateurs de mail.

Cette situation généralisée entraine bien des désagréments :

  • certains mails légitimes n’arrivent jamais à vos destinataires ;
  • en tant qu’expéditeur régulier vous risquez d’être blacklisté, voire votre serveur risque d’être blacklisté.

C’est pour cette raison que ce plugin ne permets pas d’envoyer des mails à l’aide de la fonction mail() de PHP. Cette fonction permet l’envoi simple de mail, mais elle passe par un canal partagé entre tous les sites hébergés par un serveur. Si vous l’utilisez à mauvais escient, c’est tous les autres utilisateurs qui seront pénalisés.

C’est également pour cette raison que ce plugin propose d’utiliser un service d’envoi de mail (serveur SMTP dédié, service externe commercial) spécifique à cet usage. Ainsi, même si vos envois en nombre déclenchent - à tort ou à raison - un filtrage chez les opérateurs de mail, le reste du fonctionnement du site n’en sera pas affecté (envoi des mails d’inscriptions, de formulaire de contact, de notification de forum, de pétitions...). Utilisez cette possibilité et protégez le fonctionnement quotidien de votre site web.

N’utilisez pas le serveur SMTP de votre fournisseur de mail pour envoyer vos emails en nombre, mais uniquement un serveur SMTP dédié à ça. Si vous n’en avez pas, utilisez un prestataire d’envoi d’emails en nombre.

Ou alors ne venez pas demander de l’aide sur vos mails en erreur, on vous aura prévenu.

Installation

L’installation du plugin nécessite le plugin Facteur qui prend en charge l’envoi des mails à l’aide d’un serveur SMTP.

Configuration

La configuration du plugin concerne le service d’envoi qui sera utilisé pour les envois en nombre ainsi que les réglages d’expéditeur (nom et email) :

Configuration du plugin Mailshot
Configuration du plugin Mailshot

Service d’envoi

Le réglage par défaut est d’utiliser le même service d’envoi que pour les autres mails (soit le serveur de mail SMTP configuré dans le plugin Facteur). Ce réglage fonctionne mais n’est pas conseillé comme indiqué plus haut.
Si aucun serveur SMTP n’est configuré par défaut, le premier choix est désactivé comme ceci :

Cette fois vous n’y couperez pas : vous devez alors absolument choisir un autre service pour l’envoi de vos emails.

Vous pouvez configurer un serveur SMTP (celui qui gère les emails de votre nom de domaine, Gmail...) (assurez vous dans tous les cas qu’il accepte que vous passiez par lui pour cet usage) :

Sinon, et c’est la solution la plus fiable, il vaut mieux utiliser un service dédié à l’envoi de mails en nombre comme Mailjet [1], Sparkpost [2] ou Mandrill [3] (disclaimer : l’auteur n’a aucun intérêt dans ces services commerciaux).

Le plugin propose aussi l’utilisation du service Mandrill, mais celui-ci est désormais soumis à l’utilisation d’un compte MailChimp payant, ce qui en restreint l’accès.

Cadence d’envoi

Dans tous les cas, que vous utilisiez un serveur SMTP ou un service externe, il est possible, voire probable, que vous soyez soumis à une cadence d’envoi maximale (nombre maximum de mails par quart-d’heure, par heure, par jour...). Dans ce cas là, convertissez cette cadence maximale en nombre de mail par jour et renseignez le champ Limiter la cadence d’envoi. La cadence sera prise en compte en espaçant l’envoi des mails de façon régulière pour ne pas dépasser cette moyenne journalière.

Envoi rapide

A contrario, si vous utilisez un service d’envoi capable d’envoyer très vite, ou de tout recevoir très vite et de mettre en attente les envois surnuméraires (c’est le cas de Mandrill notamment), vous pouvez activer l’option d’envoi rapide.

Quand cette option est cochée le plugin essaye d’envoyer aussi rapidement que possible à tous les destinataires. Notamment, en fonction du nombre d’envoi total à réaliser, il va lancer des processus parallèles pour accélérer le traitement, en étant capable par exemple d’envoyer 50 000 mails/heure si on a 200 000 destinataires.

Attention toutefois, envoyer rapidement un grand nombre de mails est une chose, mais il faut penser que cela va provoquer un pic de visites simultanées sur votre site, et que votre hébergement doit aussi être dimensionné pour absorber ce trafic supplémentaire.

Expéditeur

La dernière partie du formulaire permet de fixer les noms et emails de l’expéditeur qui apparaitra sur vos envois en nombre.

Historique des envois

Pour chaque envoi, le plugin conserve un historique de chaque adresse mail destinataire, date d’envoi, et statut (lu, cliqué, rejeté…) si il est récupéré depuis un service externe. Si vous envoyez beaucoup de lettres à beaucoup de destinataires, cela peut faire grossir la base de données de manière excessive, et dans ce cas il est préférable de purger les statistiques d’envoi pour les vieux envois.
Seul le détail des statistiques sera purgé, mais vous conserverez une statistique globale du nombre de mails reçus, lus, cliqués, rejetés…

Personnalisation du contenu des courriels

Avant chaque envoi d’un email, le plugin déclenche la personnalisation du mail à l’aide des variables qui décrivent le destinataire (voir Newsletters).
Les variables sont celles fournies par le plugin Mailsubscribers pour la description d’un inscrit :

  • email
  • nom
  • listes
  • lang
  • status
  • url_unsubscribe

Pour plus de détail, voir ce que retourne la methode newsletter/subscriber de l’API Newsletter.

Lors de l’envoi à un email unique qui n’est pas forcément inscrit, le plugin essaye de remplir au mieux les variables.

Envoi d’une Info-lettre

L’envoi d’une info-lettre se fait depuis la page d’administration de l’info-lettre, tel que décrit par Newsletters. Un formulaire d’envoi est disponible :

Si la première partie du formulaire sert à faire un envoi unitaire, c’est ici la seconde partie qui nous intéresse. En sélectionnant une liste d’inscrits, on peut déclencher l’envoi en masse à cette adresse en cliquant sur le bouton “Envoyer !” en regard du selecteur :

On reçoit alors un message de confirmation du déclenchement de l’envoi, et l’envoi en cours apparaît en bas du formulaire. Un résumé de l’avancement apparaît (exprimé en nombre de mails envoyés par rapport nombre total de destinataires). Des boutons de contrôle permettent de mettre l’envoi en pause ou d’abandonner l’envoi.

Tant qu’un envoi est en cours, la liste est rafraichie toutes les 2minutes pour afficher la progression de l’envoi.

Suivi des envois de lot

Il est possible d’avoir une vision plus détaillée des envois de lot (passés en en cours). Pour cela, utilisez le menu Publication > Suivi des envois de mails en nombre. Vous accédez alors à une page qui récapitule les envois en cours et les envois terminés :

Les lots d’envoi en cours sont affichés d’une puce orange, les envois en pause d’une puce blanche, les envois terminés d’une puce verte et les envois abandonnés d’une puce rouge.

Si on clic sur le lien Envoi N°x d’un des envois, on arrive sur une page récapitulative complète qui expose la date et l’avancement de l’envoi, le contenu HTML et texte envoyé, ainsi que la liste des destinataires :

Les destinataires sont regroupés par statut (envoi à venir, envoi réussi, email ouvert, email cliqué, envoi échoué). Il est ainsi possible de retrouver si l’email a déjà été envoyé à un destinataire particulier, ou si il l’a ouvert, ou cliqué sur un lien [4].

Gestion des erreurs

Lorsque l’envoi à un destinataire échoue, on incrémente un compteur de tentative pour ré-essayer en fin de lot. À la 5ème tentative en échec l’envoi est marqué en statut fail et n’est plus relancé.
Il est possible de personnaliser ce nombre de 5 tentatives en définissant la constante define('_MAILSHOT_MAX_TRY', 5);

La gestion des bounce est prise en charge avec le service Mandrill qui notifie en HTTP pour signaler quand un envoi a été rejeté. Dans le cas de l’envoi par SMTP on ne gère pas les bounce (l’API interne le permet au moyen de la fonction newsletter/feedback mais il faut implémenter la partie relève d’une boite mail qui sert à collecter les bounces).

Pour le service Mailjet, l’API calcule les bounces.

Si la même adresse de destinataire a été vue en échec ou en bounce lors des 3 derniers envois (et que chacun de ces envois a réussi pour au moins un destinataire) cette adresse est automatiquement désabonnée de toutes les listes.
Il est possible de personnaliser ce seuil de 3 envois en définissant la constante define('_MAILSHOT_MAX_FAIL', 3);

En cas de non-déclenchement des envois :

Si l’envoi ne démarre pas ou met du temps, c’est parce que le cron de SPIP ne fonctionne pas ou pas assez souvent. Vous pouvez le forcer à la main en appelant l’url spip.php?action=cron mais en général c’est lié à un hebergeur qui bloque les appels http sortant, ou un site avec vraiment très peu de traffic.
Dans ce cas, un paliatif peut-être d’ajouter dans le fichier mes_options.php la ligne :
define('_HTML_BG_CRON_FORCE',true);

Migration depuis un ancien plugin

Lors de l’installation, le plugin regarde si les plugins SPIP-Listes ou SPIP-Lettre étaient auparavant utilisés. Si les tables correspondantes sont détectées, l’historique des envois (et des destinataires si possible) est automatiquement importé. Il contient naturellement le contenu HTML et Texte qui avait été envoyé.

Après avoir installé le plugin Mailshot et vérifié que toutes les anciens envois ont bien été importés, vous pouvez désinstaller votre ancien plugin pour supprimer ses données si vous le souhaitez.

Footnotes

[1pour bénéficier des fonctions de statistiques d’envoi au sein de SPIP, il faut utiliser l’API v3 de Mailjet

[2pour bénéficier des services de Sparkpost, il faudra que votre serveur fonctionne sous php 5.5.0 minimum

[3qui nécessite maintenant un compte Mailchimp payant

[4les fonctions de tracking sont implémentées avec les services Mailjet, Sparkpost et Mandrill

Portfolio

updated on 2 October 2019

Discussion

107 discussions

  • 2
    Alex Danau

    Bonjour,

    J’ai installé le plug in Newsletter. Je teste les envois et un point, pour le moment, me pose question. L’adresse “expéditeur” qui apparaît sur le courrier ne correspond pas à celle placée dans l’option adresse d’envoi de mailshot. J’utilise Mandrill pour acheminer le courrier.

    Merci de m’éclairer.

    Bien à vous.

    AD

    Reply to this message

  • 3
    freechelmi

    Bonjour , j’essaie d’envoi mon infolettres de 3000 inscrits. Mais avec 5 mails/minutes , il faut 10 heures.

    j’ai modifié $cadence = array(60,5); en $cadence = array(60,50);

    mais ça ne semble pas avoir d’effet.

    ne serait pas juste indispensable de pouvoir indiquer quel cadence on veut dans les options du plugin ?

    • L’envoi “rapide” est déconseillé car il augmente la probabilité de détection en SPAM par les opérateurs de mail.
      Une newsletter n’est en général pas une information “temps réelle” et il n’y a aucun besoin à l’envoyer “très vite à tout le monde en même temps”, d’autant plus que cela génère possiblement un pic de traffic sur un site qui n’est pas forcément dimensionné pour cela.

      Ceci exposé, la version 1.4.0 du plugin dispose d’un mode d’envoi “rapide” qui ne tient pas compte d’une cadence maxi, et qui ne se freine pas dans l’envoi des mails. Cela dit, le plugin continue à envoyer les mails un par un, et peut donc être limité par le temps d’envoi de chaque mail, selon le service utilisé.
      (Il serait bien entendu possible de faire plus vite, en envoyant plusieurs mails en parallèle comme je l’avais implémenté dans le passé dans le plugin SPIP-Listes, mais ce me semble être contre-productif au final.)

      Fonctionnalité à tester, retours bienvenus. Cependant il est possible que la cadence d’envoi soit aussi limitée car ton site a peu de traffic et cela limite les appels du cron de SPIP.

    • freechelmi

      Merci cedric pour ton travail et ta réponse très très detaillée comme toujours.

      Malheureusement ton raisonnement reste très théorique.

      Nous ( Millebabords) envoyons tous les lundi a 2H du mat , un agenda qui annonce les evenements de la semaine a venir. il est donc important que nos 3000 abonnées l’ait reçu avant 9H.

      On envoyait ces 3000 mails via mail() en moins d’une heure mais avec plus ou moins de succès je te l’acorde.

      On mets donc maintenant 10 heures pour 3000 mails , j’aimerais passer a 5 heures et donc une cadence de 10 mails/minutes environ.

    • Pour info, la version 1.5.8 du plugin résoud les problèmes de lenteur d’envoi : en dehors du mode rapide, quand on fixe une cadence, celle-ci est respectée (sauf si le SMTP est vraiment très lent, mais même dans de cas on sera beaucoup plus proche de la cadence demandée qu’avant).

      Également, la cadence maximale (par défaut) est passée de 300 à 600 mails/heure, ce qui devrait correspondre à ton besoin.

    Reply to this message

  • Bonjour,

    Peut-on effacer définitivement les inscrits supprimés aux infolettres, sans passer par PhpMyAdmin ;-) ?

    Le plugin Corbeille aurait pu faire mon affaire, mais il ne recense pas ces inscrits supprimés.

    MErci,
    françois

    Reply to this message

  • 1

    Il y a-t-il un rapport entre la variable “smtpd_recipient_limit” à éditer dans le fichier “/etc/postfix/main.cf” (sur le serveur d’hébergement) et le nombre d’inscrits sur une liste d’envoi?

    Autrement dit, le nombre d’inscrits dans une liste peut-il être plus grand que la variable “smtpd_recipient_limit”?
    Sachant que le site et le serveur SMTP sont sur un serveur dédié.

    Merci d’avance.

    • Pas de problème avec la configuration smtpd_recipient_limit de postfix car le plugin envoi les mails un par un pour pouvoir personaliser les variables (email, adresse de desabonnement). Du coup tu peux avoir autant d’inscrit à la liste que tu veux, indépendamment du réglage de ton postfix.

    Reply to this message

  • 3

    Constat en utilisant Mailshot v.1.4.1 en combinaison avec Mandrill:

    Les envois ne respectent pas du tout les Nom et Adresse d’envoi personnalisés entrés dans la page de Configuration du plugin.

    Ce sont systématiquement les nom et email entré dans Configuration > Identité du site: adresse e-mail du webmestre qui sont utilisés. Oooops. :/

    • PS: la config entrée dans Plugins > Facteur (“Configuration de l’adresse d’envoi”) n’est pas non plus prise en compte.

      À noter que mon réglage d’envoi du Facteur est “Utiliser la fonction mail de PHP”... est-ce que ce réglage a une incidence, si Mailshot utilise Mandrill ?

    • Bonjour,

      Je viens de constater le même problème dans un envoi récent, tous les emails (3500) sont partis avec l’adresse du webmaster et pas avec l’adresse qui avait été mise dans la conf du plugin.
      Et ceci en utilisant Mandrill.
      Bon on va contourner en changeant l’adresse du webmaster ... mais ce serait mieux si on pouvait les différencier !

      Pierre.

    • La version 1.5.4 du plugin doit corriger ce problème qui ne se présentait que dans certains scenarios.

    Reply to this message

  • 1

    Bonjour,

    Pour faire un suivi de campagnes d’envoi de newsletter avec Google Analytics, serai-t-il possible de prévoir dans la config du Service d’envoi, des paramètres supplémentaires (X-MC-GoogleAnalytics, X-MC-GoogleAnalyticsCampaign) qui seraient placé dans les SMTP headers de Mandrill (par exemple).
    -  voir ICI

    Je pense que se serait très intéressant, à moins qu’il y ait une autre solution pour coupler GA et Mandrill ?

    françois

    • J’ai le même besoin, pouvoir ajouter des headers liés aux infolettres pour tracker des campagnes sur Mailjet.

      C’est très spécifique, bien sûr, mais de manière générale, y’a t’il une possibilité ou une API pour pouvoir injecter des headers dans les envois ?

    Reply to this message

  • 3

    Bonjour,

    Est-ce que les utilisateurs avec une adresse mail chez ovh pourraient me renseigner svp sur les infos rentrer dans la boite ?
    J’ai tout essayé et mon mail test ne veut pas partir...

    Merci beaucoup !

    • Si la question est encore d’actualité, voir ici : http://guide.ovh.com/ConfigurationEmail

    • J’ai essayé avec spip-listes chez ovh il y a 3 ans, impossible d’avoir un smtp en hebergement mutualisé... il faut passer à un dédié ou vps... ou trouver un service spécialisé comme proposé ici...

      bon courage...

    • The_Moye

      Bonjour,

      Ça fonctionne en mutualisé, même si c’est très limité : 100 mails / heure, pour tout le mutualisé.
      Les infos :

      • Serveur SMTP :
        • Hôte : ssl0.ovh.net
        • Port : 465
        • Requiert une authentification : Oui
        • Nom d’utilisateur : ton e-mail
        • Mot de passe : celui de ton mail
        • Connexion sécurisé : SSL

      N’oublie pas de regarder les logs de Spip si ça ne part pas.

    Reply to this message

  • Bonjour,
    Je cherche mai ne trouve pas... Je travaille à l’envoi de lettres d’info avec :
    Spip 3.0.8
    sarka 3.2.28
    MailShot 1.4.1
    MailSubscribers 1.3.1
    SPIP-Listes 3.0.11
    Newsletters 1.2.7

    et j’obtiens ceci :

    «Fatal error: Call to undefined function curl_init() in /home/.sites/143/site2/.users/84/ad22/web/plugins/mailshot-v1/mailshot-v1/lib/mandrill-api-php/src/Mandrill.php on line 45»

    Pourtant, j’ai bien utilisé une clé mandrill...
    Que puis-je faire ?
    Merci
    Yonl
    www.occe.coop/ad22

    Reply to this message

  • 10

    Bonsoir

    Quand on fait un envoi via mandrill et son api, donc pas en smtp, on peut envoyez plus de 5 mails par paquets ? Parce que quand on a une liste de 600 mails et 150 visites par jours, ça demande du temps pour l’envoi à ce niveau déjà.

    • Bonsoir,
      Même question que Pierre mais pour l’envoi SMTP.
      5 mails par paquets c’est peu pour des mailings importants.
      Est-il possible d’augmenter la cadence ?
      Merci

    • Bien sur, techniquement on peut toujours envoyer plus vite. Très vite même.
      Mais :

      • Mandrill est les autres prestas limitent les cadences d’envoi (ce qui est pris en compte dans la config de mailshot) ;
      • plus tu envoies de mails en nombre, plus tu as de chances d’être pris pour un spammeur et detecté comme tel par les fournisseurs de mails ;
      • envoyer des mails très vite c’est bien. Encore faut-il que ton site tienne la charge si tout le monde clic dans la lettre en même temps.

      5 mails toutes les minutes ça fait 300 mails/heure et 7200/jour. Ça me parait déjà pas mal.
      Sans doute le rythme d’envoi est plus faible quand il y a peu de trafic car cela ne fait pas tourner le cron assez souvent, mais c’est un autre problème. Une solution est de faire tourner le cron par un hit sur ?action=cron.

    • Et comment tu fais un cron la dessus ?

    • Merci pour la réponse ;-)
      Le “problème” pour ma part est qu’il faut que je fasse parvenir 5000 mails en 2 heures maximum.
      Il s’agit d’une newsletter d’information pour un site d’actualité avec un trafic important. Donc si l’information met trop de temps à arriver, ça ne va pas...
      Effectivement il y a le risque de spam.
      Un champ pour indiquer le nombre d’envoi par minute serait idéal... mais ça poussera peut-être les spammeurs à abuser du plugin...
      Bref pas de solutions miracles sur ce point semble-t-il.

    • @V1nce : tu peux accèlerer l’envoi en modifiant le fichier genie/mailshot_bulksend.php et en y ajoutant la ligne :

      		mailshot_envoyer_lot($nb);
      +		return -60;
      	}

      Cela forcera la relance asap du cron, et devrait donc fortement accélérer l’envoi. Il va sans dire que cela n’est pas compatible avec le réglage qui limite la cadence d’envoi, et à tes risques et périls en ce qui concerne le SPAM...

      @Pierre : tu ajoute un curl http://example.org/?action=cron dans ton cron système, toutes les minutes par exemple.

    • Bonjour,
      Merci pour cet ensemble de plugins tres simple d’emploi. Exactement ce que je cherchais pour pouvoir enfin deleguer la gestion des newsletter a un redacteur de mon site SPIP.

      Par contre j’ai quelques soucis sur la performance d’envoi. Dois je comprendre que le defaut est 5 mails par paquet et un paquet par minute?
      J’ai lance depuis ce matin 11h20 un envoi a 780 adresses. Il est 23h et je ne suis qu’a 480 email envoyes sur les 780.

      Est ce que vous avez une idee sur quel pourrait etre mon probleme, s’il vous plait?

      J’ai laisse tous les reglages de mailshot a leur valeurs par defaut

      Merci d’avance

      Eric

    • au fait j’ai oublie de preciser deux choses:
      -  j’utilise SMTP
      -  je suis heberge chez OVH
      -  j’utilise SPIP 3.0.5

    • Eric ça serait pas un manque de visite ? et que du coup il faut que tu fasses un cron comme moi pour que cela envoie plus vite ?

    • C’est fort possible, je tourne a 76 visites/jour en moyenne.
      du coup pour faire un cron, comment fais-je? Il y a bien la methode curl http://example.org/?action=cron mais je ne sais pas comment faire. A moins que je doive utiliser la modif du code suggeree pour V1nce?
      J’utilise SMTP pour envoyer ma mailing list
      Merci d’avance
      Eric

    • @Cedric Merci pour l’information ;)
      J’ai manqué ton message mais grâce au php commenté j’ai trouvé mon bonheur dans inc/mailshot.php.
      j’ai modifié la ligne

      $cadence = array(60,5);

      ça me permet de gérer le nombre d’envoi pendant une période donnée.
      Pour l’instant ça me va très bien...

      @Eric tu peux utiliser cette méthode ou celle de cedric
      Pour ajouter la tâche cron il faut que tu le fasse dans le manager de ton serveur ou sur ton serveur directement. Demande à la personne ou société qui gère ton hébergement.

    Reply to this message

  • 1

    Bonjour,

    Toujours ravi d’utiliser ce(s trois) magnifique(s) plugin(s) qui me rende un fier service.

    Histoire de - peut-être - améliorer les choses, il me semble qu’il y ait un bug sur le lien entre le plugin et l’API Mandril. En effet, après avoir fait un envoie en nombre qui s’est bien passé, les retours de Mailshot au sein de SPIP et de l’interface de Mandril diffèrent ! (c.f. image jointe)

    Bien cordialement

    • Bonjour Cédric,

      Un petit up à propos de ce comportement bizarre : pas les mêmes remontées d’états entre Mandril et Mailshot !

    Reply to this message

Comment on this article

Who are you?
  • [Log in]

To show your avatar with your message, register it first on gravatar.com (free et painless) and don’t forget to indicate your Email addresse here.

Enter your comment here

This form accepts SPIP shortcuts {{bold}} {italic} -*list [text->url] <quote> <code> and HTML code <q> <del> <ins>. To create paragraphs, just leave empty lines.

Add a document

Follow the comments: RSS 2.0 | Atom