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

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 5e 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.

Notes

[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

Discussion

126 discussions

  • 2

    un changement d’année qui perturbe mailshot ? ;-o)
    spip 4.2, mailshot 3.0 avec brevo (ex SIB)

    jusqu’à ma première lettre 2024, tout allait bien et je voyais tous les détails que nous donnent le suivi des évènements mails permettant d’avoir le nombre de mails lus, cliqués...

    Mais l’année commence mal, ma première lettre reste bloquée à 1% de taux de lecture, bien plus bas que ce que j’ai d’habitude...

    et je m’aperçois qu’il n’y a plus de log mailshot depuis le 2/01 à 02h... donc 24 heures après le début d’envoi... alors que les évènements continuent à s’accumuler coté brevo...

    Il y a qqchose qui ne remonte plus sur mailshot... mais je ne vois rien dans les logs...

    merci d’une indication sur où chercher ...

    pam

    • ce constat se renouvelle, mais pas systématiquement
      il est apparu pour le premier envoi 2024 le 1er janvier
      puis 4 envois ont fonctionné normalement avec un taux d’ouverture de 25% en moyenne,
      et l’envoi du 15 mars reste bloqué à 0,1% dans le suivi mailshot, alors que sur brevo, il y a des milliers d’évènements...
       ???
      où chercher ?

    • précision, à ce jour, il y a dans brevo 610 évènements « ouvert » et 104 clickés...
      dans le suivi des envois en nombre de mail shot, 19 ouverts seulement...
      par contre, il y a un chiffre très proche de 1747 délivré pour brevo et 1743 dans mailshot...

      je n’ai pas trouvé de logique dans les mails des évènements brevo qui ne remontent pas à mailshot... à part que à partir de 12h26 le jour de l’envoi, il ne se passe plus rien, alors qu’il y a ensuite 451 évènements dans brevo sur 6 jours, mais à 12h26 le premier jour, il y en a eu 159 dans brevo et seulement 19 donc dans mailshot ?

      plus bizarre, le dernier enregistré dans mailshot l’est à 12h26 le premier jour d’envoi, alors que dans brevo, l’évènement est 3 jours après ?

      et c’est pour un envoi, alors que les précédents et les suivants semblent cohérents....

    Répondre à ce message

  • Bonjour,,
    Quelle configuration est nécessaire pour faire du STARTTLS avec mot de passe normal ?
    C’est ma configuration Thunderbird qui est fonctionnelle. Si j’essaie TLS, j’ai un message
    warning : TLS library problem : error:14094418:SSL routines:ssl3_read_bytes:tlsv1 alert unknown ca :../ssl/record/rec_layer_s3.c :
    1543:SSL alert number 48

    Etrangement, le plugin facteur fonctionne très bien avec la configuration Utiliser la fonction mail() de php mais mailshot ne propose pas ce choix.
    Merci de vos lumières.

    Répondre à ce message

  • Bonjour,

    Après une màj en 4.2.4 j’ai ce message d’erreur dans la page de configuration de Mailshot :

    Deprecated : str_replace() : Passing null to parameter #2 ($replace) of type array|string is deprecated in /home/public_html/ecrire/inc/utils.php on line 947

    MailShot 3.0.12 / MailSubscribers 3.4.6 et PHP 8.1.22

    C’est grave docteur ?

    Merci de votre aide.

    Répondre à ce message

  • 4

    Bonjour à vous,
    Juste pour vous dire que l’archive n’est pas accessible...

    • Hum, je viens de tester et les 3 archives à droit sont telechageables.

    • Bonjour Maïeul,
      alors oui avec Chrome, mais pas avec Firefox (je sais, ça sonne bizarre mais je viens de réessayer avec le même résultat : « FB-k5d5i.zip.part ne pourra être enregistré car le fichier source ne peut être lu »)...

    • J’ai utlisé firefox. Peut être un pb sur ton install à toi ? c’est étrange j’en convient.

    • Je ne comprends pas ce qui s’est passé, mais je ferai attention la prochaine fois avant de faire du bruit finalement pour rien (on peut peut-être éliminer cette conversation pour ne pas polluer...).

    Répondre à ce message

  • utilisateur depuis des années, j’ouvre un nouveau site avec une liste de 300 inscrits (validés)
    Mais l’envoi de la première lettre génère 45% d’échec avec le statut « Envois annulés » ?
    j’ai vérifié les 3 premiers mails qui fonctionne bien en dehors (depuis ma messagerie)

    j’avais l’habitude du statut « envois échoués », qui demandait une action pour vérifier le mail en général erroné ou refusé, est-ce un pb de traduction ou le statut « annulé » est différent et alors à quoi correspond-il ?

    pam

    Répondre à ce message

  • Bonjour,
    Lors d’un envoi généré via mailshot, je souhaiterais pouvoir déclarer une adresse de retour. J’utilise Sparkpost, lequel ne permets pas d’utiliser une adresse d’expéditeur hors du domaine déclaré.
    Un peu comme avec Facteur, je souhaiterais que l’email « expéditeur » déclaré soit placé en ’reply-to’ et que le ’from’ soit l’email par défaut de la config mailshot.
    Est-ce possible ?
    Merci de vos lumières.
    JuL

    Répondre à ce message

  • 5
    Sylvain LD

    Bonjour,
    Voilà le message que j’ai quand j’utilise Mailjet :

    Webhook
    shutdown
    As your webhook remained unresponsive for more than 24 hours, we will not push any event to it anymore.

    API key : 626751c2d535b70017ca1bb8d05f7ca1
    Webhook endpoint : https://www.xxxxxxxx/mailshot_webhook.api/mailjet/

    If you wish to keep receiving events on your webhook, please solve the current issues and configure it again.
    If you have any questions, please contact our Support Team.
    Sincerely,
    The Mailjet team

    je suis en Spip 3.2.15, avec Mailshot 2.2.3
    Merci de me dire ce qui manque dans ma config.
    Sylvain Le Doaré

    • Sans doute car le fichier .htaccess est manquant.

    • Sylvain LD

      J’ai bien un fichier .htaccess à la racine de mon site, il y a une cinquantaine de ligne (commentaires compris), C’est le fichier générer par mon hébergeur.
      Que devrait-il contenir comme instruction pour que le webhook fonctione ?

    • Le contenu du fichier htaccess.txt de SPIP (qui entre autre gère les urls propres mais aussi la redirection des urls en .api vers les fonctions internes de SPIP et des plugins)

    • Sylvain LD

      j’ai placé dans le htacces de mon hébergeur tout le contenu du htaccess de Spip et j’ai toujours les message de Mailjet comme quoi le webhook est down !

    • Un peu pareil, avec mailjet aussi, et comment j’ai réglé ça :
      -  « avant », ça marchait
      -  j’ai mis à jour mailshot de la v1.31.4 à la v3.0.7 à la mi juillet
      -  depuis, bulkmailer_mailjet_webhook (ma surcharge de bulkmailer_mailjet_webhook_dist) n’est plus appelée.
      -  le dernier mailshot_feedback.log date aussi de cette mi juillet. C’est donc que action_api_mailshot_webhook n’est pas appelé.
      -  le paramétrage de mailjet indique l’url de notification suivante : /mailshot_webhook.api/mailjet/ et le test échoue en erreur.
      -  je n’ai pas changé en juillet le htaccess concernant le traitement des .api : RewriteRule ^(ecrire/)?([\w]+)\.api([/.](.*))?$ spip.php?action=api_$2&arg=$4 [QSA,L]
      -  quand j’interroge la ressource demandée par mon navigateur, la requête échoue en raison d’une erreur 403 (forbiden). Qu’est ce qui peut causer ça ? La fonction SPIP renvoie 403 quand la data reçue est malformée.
      -  Je vois que dans l’url paramétrée sur mailjet pour les webhooks, il y a un www. alors que désormais c’est l’url sans www qui est préférée. Je supprime donc les www du paramétrage.
      Le test sur le site mailjet est toujours en échec, mais par contre un log est désormais bien créé dans mailshot_feedback.log. Ouf, la fonction action_api_mailshot_webhook est donc bien appelée.
      Et je constate que le problème est réglé.

    Répondre à ce message

  • 3

    Bonjour,
    Dans les retour suite à un envoi réalisé récemment, je vois comme d’habitude « Envois réussis », « Mails Ouverts », « Mails Cliqués » et « Envois échoués ». Jusque que la tout va bien.
    Par contre j’ai aussi « Envois annulés » (155 sur 469)...
    A quoi corresponds ce cas de figure ? Sachant que ce n’est pas un admin qui aurait annulé l’envoi.
    Merci,
    Julien

    • Bonjour,

      Où peut-on voir « mails ouverts », « mails cliqués », ... ?

      Merci.

    • Bonjour Ludo,
      Vous pouvez voir ce genre de feedback sur la page de chaque envoi dans le backoffice à condition d’utiliser une API (Sparkpost dans mon cas).

    • Merci, je croyais que c’était dans le plugin et que j’avais manqué l’info.

    Répondre à ce message

  • Bonjour,
    Sous spip 4.0.6, php 7.4.18, Mailshot 3.0.7, MailSubsribers 3.0.8 et Facteur 5.0.3.
    J’utilse le lien smtp de MAILJET.

    je cherchais à traiter cette allerte de Mailjet :
    Webhook failure
    It seems one of your webhook is unresponsive and fails to process the events we are pushing.

    API key : xxxxxxx
    Webhook endpoint : https://xxxxxxx.fr/mailshot_webhook.api/mailjet/

    Please resolve the issue with this webhook before 2022-05-20 14:35 UTC. After this date, we will stop sending events to your webhook.

    If you have any questions, please contact our Support Team.
    Sincerely,

    Je pensais à tort que c’était du ressort du plugin Facteur, Rastapoulos, m’a indiquer d’activer le .htacess. J’avais omis de l’activer ! C’est fait maintenant, mais me faut-il faire d’autres réglages ?
    J’ai déjà créé un dossier /mailshot_webhook.api/mailjet/ à la racine du site cela est-il suffisant ?
    Merci bien Alain BOURDEAU

    Répondre à ce message

  • Bonsoir,

    Sur des envois de 2500 emails, j’ai de temps en temps un blocage :
    la newsleter reste en « encours » avec le message "Aucun destinataire programmé (initialisation en cours)’

    Les logs ne me parle pas
    Fichier : plugins/mailshot/inc/mailshot.php-*Ligne : 539-*Fonction : mailshot_initialiser_destinataires()
    mailshot_initialiser_destinataires #5859 : 0/2526
    Fichier : plugins/mailshot/inc/mailshot.php-*Ligne : 289-*Fonction : mailshot_envoyer_lot()
    mailshot_envoyer_lot #5859 0/2526 (max 100)
    Fichier : plugins/mailshot/genie/mailshot_bulksend.php-*Ligne : 16-*Fonction : genie_mailshot_bulksend_dist()
    bulksend:meta_processing:oui

    Spip 3.2 et les plugins à jour

    Une idée de ou chercher quand cela se produit ?

    Merci

    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