Facteur

Un plugin pour regrouper toutes les fonctions avancées autour de l’envoi de courriels.

Important !

A partir de la version 4.3.0 si vous utilisez un fournisseur commercial pour l’envoi des mails (Mailjet, Sendinblue, Mandrill) vous devez installer en plus le plugin Mailshot pour conserver votre fournisseur d’envoi !

Introduction

SPIP propose une fonction générique envoyer_mail() pour envoyer un courriel. Elle est assez simple d’utilisation mais peut paraître limitée lorsqu’on veut configurer des options plus complexes : envoi par SMTP, ajout de pièces jointes, etc.

Le plugin Facteur propose d’intégrer proprement à SPIP la librairie PHPMailer. Pour que les fonctionnalités soient immédiatement disponibles, Facteur surcharge de manière compatible la fonction envoyer_mail().

Installation

Placer le contenu du paquet ZIP dans votre dossier plugins/ et activer Facteur dans l’interface d’administration des plugins.

Vous pouvez configurer les options d’envoi (SMTP notamment) en cliquant sur Configuration, puis sur Facteur.
Exemple en local, entrer smtp.orange.fr et port 25.

Appel de la fonction

// Chargement de la fonction
$envoyer_mail = charger_fonction('envoyer_mail', 'inc/');
// Utilisation
$ok = $envoyer_mail(...);

Utilisation

Voici d’abord la fonction standard de SPIP :

function inc_envoyer_mail($destinataire, $sujet, $texte, $from = "", $headers = ""){}
  • $destinataire : adresse de courriel du destinataire
  • $sujet : sujet du courriel
  • $texte : texte brut du message
  • $from : adresse de courriel de l’envoyeur
  • $headers : ajout d’entêtes supplémentaires au message

Avec le plugin Facteur, vous pouvez déjà utiliser cette fonction de la même façon. Ce qui signifie que le plugin ne casse pas l’existant si votre code l’utilisait déjà.

Voilà comment est déclarée la fonction dans Facteur et ce qui change :

function inc_envoyer_mail($destinataire, $sujet, $corps, $from = "", $headers = ""){}
  • $destinataire : peut être le destinataire ou bien un tableau où chaque ligne contient un destinataire
  • $corps : peut être le texte brut ou bien un tableau associatif contenant toutes les options de message

Description des options

Le tableau $corps des options se présente comme suit :

$corps = array(
	'options' => 'valeur'
);

Et voici les options possibles :

  • html : le corps du message en version HTML
  • texte : le corps du message en version texte brut
  • nom_envoyeur : le nom de l’expéditeur
  • cc : une ou des adresses de courriel à mettre en copie, soit une adresse en chaine de caractère, soit plusieurs adresses dans un tableau
  • bcc : la même chose mais en copie cachée
  • repondre_a : l’email à qui les réponses seront adressées, très utile dans le cas d’une utilisation d’un SMTP externe, qui va forcer l’envoi par un nom de domaine bien précis, dans ce cas, l’expéditeur est ce nom de domaine, et le “repondre_a” devient l’email de la personne qui devra recevoir la réponse (d’un help desk par exemple)
  • pieces_jointes : un tableau décrivant les pièces jointes, chaque élément est lui-même un tableau associatif décrivant une pièce jointe comme ça :
    • chemin : le chemin complet du fichier (chemin sur le file system, pas une URL)
    • nom : le nom du fichier
    • encodage : comment sera encodé le fichier, par exemple “base64”
    • mime : le type MIME du fichier

Exemple :

$corps = array(
   ’html’ => $message,
   'cc' => array('truc@truc', 'bidule@bidule'),
   ’pieces_jointes’ => array(
           array(’chemin’ => $chemin_absolu,
           ’nom’ => ’azerty’,
           ’encodage’ => ’base64’,
           ’mime’ => ’image/jpeg’)
           )
    );

Exemples d’usages

-  On pourra par exemple utiliser un squelette existant pour générer le message HTML :

$html = recuperer_fond("inclure/mail", array('id_article' => $id_article));

-  Générer le message HTML avec une variable $texte en utilisant le squelette d’email fourni par le plugin

$html = recuperer_fond("emails/texte", array('texte' => $texte));

-  Générer le message HTML avec une variable $html en utilisant le squelette d’email fourni par le plugin

$html = recuperer_fond("emails/texte", array('html' => $html));

-  Inversement, on pourra générer la version texte du message à partir de sa version HTML en utilisant la méthode html2text de la classe Facteur :

include_spip('classes/facteur');
$texte = Facteur::html2text($html);

-  Enfin, on pourra rassembler ces éléments dans le tableau avant de les envoyer :

$corps = array( 
    'html' => $html, 
    'texte' => $texte, 
    'nom_envoyeur' => $nom_envoyeur 
);

Activer le mode débug

Si l’envoi des envois échoue, vous pouvez activer le mode débug
Ajouter dans votre fichier config/mes_options.php

define('_LOG_FILTRE_GRAVITE', 8);
define('_FACTEUR_DEBUG_SMTP',4); // 0,1,2,3,4  est la valeur la plus verbeuse

Discussion

131 discussions

  • 6

    Bonjour,
    Sous spip 4.0.6, php 7.4.18 et Facteur 5.0.3 en lien avec Maishot 3.0.7 et MailSubscribers 3.0.8.
    J’utilise le lien smtp MAILJET.
    Si c’est prévus quelle est l’adresse locale que je dois déclarer pour les échanges des Webhooks de mailjet ?.
    J’ai créé les dossiers /mailshot_webhook.api/mailjet/ au même niveau que Spip et conforme à l’adresse proposée par mailjet. Je n’ai rien en retour dans ces dossiers.
    Merci bien
    Alain BOURDEAU

    • Je n’ai rien compris à ce que tu essayes de faire. Il n’y a strictement aucun “dossier” à créer (pourquoi des dossiers ? de quoi ?). Ya juste à configurer des choses dans l’interface quoi, les clés d’API fournies par le service choisi (ici mailjet donc).

    • C’est tout simplement savoir comment utiliser ce qui est proposé par Mailjet (voir la capture d’écran suivante).
      J’ai néanmoins les notifications par courriel des désinscriptions ou des inscriptions.
      Merci bien

    • En complément, ne plus avoir ce type de message 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://choeurcrescendo.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,
      The Mailjet team
      This email was sent to you by Mailjet because you signed up for a Mailjet account. Please let us know if you feel that this email was sent to you by error.

    • Mais ça n’a pas de rapport avec Facteur. Faut juste configurer dans la config de avec ce qui est demandé, les clés d’API quoi. Mais pour Mailshot c’est propre à sa config donc, dans son peanneau de config (et dans son forum si ya un problème).

    • Mais t’as bien le .htacess fourni par SPIP ? Sinon les URL d’API peuvent pas marcher… (toutes les URL spip/truc.api/etc)

    • Merci bien,
      Justement, je ne l’avais pas activé !!!
      Je viens de le faire, y a plus qu’a voir si “c’est mieux”, ce dont je ne doute pas puisque tes conseils techniques sont rarement pris en défaut.
      Amicalement Alain BOURDEAU

    Reply to this message

  • 1

    Bonjour,

    Avec les services pro d’OVH, la connexion SMTP doit suivre le protocole STARTTLS.
    Or, facteur ne propose pas ce mode :(

    Tout ce que facteur affiche lorsqu’on tente un test, c’est :

    SMTP Error: data not accepted.

    Est-ce que c’est une erreur de paramétrage de notre côté, ou une limitation de facteur insurmontable ?

    • starttls c’est tls, mais plus souple, avec un démarrage en clair non chiffré, donc à priori la lib sait forcément le gérer… mais j’avoue que suivant les serveurs et les combinaisons de mode, ports, etc des fois c’est le tatonnage pour trouver.

    Reply to this message

  • Bonjour à tous,
    Le plugin fonctionne bien, j’ai associé à un compte gmail pour l’envoi
    Seulement je recois toujours ce message d’erreur dans les mails envoyés:

    Erreur d’exécution plugins/auto/facteur-2c4f9-v4.1.1/emails/texte.html

    Quelqu’un saurait il me dire ce qui ne va pas ? Je suis sous Spip 4.0.0 et facteur 4.1.1

    Reply to this message

  • 1

    Bonsoir,

    Je n’arrive pas à configurer le plugin Facteur pour une boite mail yahoo.

    j’ai testé plein de réglages différent sans succès.

    À noté que si je regarde les réglage smtp sous thunderbird la méthode d’authentification est “OAuth2” et là je ne vois pas où entrer cela dans le plugin.

    Une idée?

    Merci d’avance,

    Cordialement,

    Hervé

    Reply to this message

  • 4

    Bonjour,

    J’essaie de configurer ce plugin pour des envois de courriels authentifiés, depuis un serveur smtp externe.
    J’ai coché et renseigné les options suivantes:

    • Utiliser SMTP
    • Hôte: monhote.truc
    • Port: 587
    • Requiert une authentification —> oui
    • Connexion sécurisée —> TLS
    • Vérification du certificat SSL —> le certificat SSL du serveur SMTP est émis par une Autorité de Certification (recommandé)

    Lorsque je teste la configuration, je reçois bien le courriel.
    Cependant, dans l’en-tête du courriel que je reçois, je ne trouve pas d’en-tête DKIM et j’ai “Agent utilisateur” à “PHPMailer 6.1.3 (https://github.com/PHPMailer/PHPMailer)”.
    Sans l’en-tête DKIM, les grand·e·s méchant·e·s du mail vont évidemment mettre ça dans les spams dans le meilleur des cas, voir, ne pas délivrer le courriel et ne rien dire. C’est fâcheux. ;-)

    Est-ce que j’ai oublié quelque chose?

    Je précise qu’en utilisant mon courriel via le webmail ou bien un autre client, j’obtiens bien l’en-tête DKIM.

    • Bonsoir,

      Tu as testé https://www.mail-tester.com/ pour aider à la configuration ?
      Il doit manquer dans les dns du domaine l’ip du serveur smtp qui envoi afin de l’authentifier.

    • J’avais testé avec mail tester.
      En gros, l’envoi via facteur (avec l’option smtp) obtient une note de 8.7/10, sans signature DKIM.
      Si je reteste depuis le webmail de l’hébergeur, j’obtiens la note 10/10, avec la signature DKIM.

      Ça me donne vraiment l’impression que facteur n’utilise pas vraiment l’authentification smtp pour l’envoi de mes courriels depuis le site.

    • et smtp de l’ hébergeur ou un autre smtp ?

    • Oui. Pour avoir la bonne signature DKIM dans l’en-tête de mes courriels provenant du site, j’essaie bien sûre d’utiliser le smtp de mon hébergeur.

    Reply to this message

  • 1

    Bonjour,

    le plugin facteur existe-t-il pour formidable avec spip 4.0 ?

    • Il manquait un tag sur la dernière version marquée pour SPIP 4 afin que ça génère le paquet ZIP pour le commun des mortels. C’est fait, ça va arriver dans les heures qui suivent.

    Reply to this message

  • 2

    Bonjour,

    Pour mettre à jour phpmailer, il suffit de remplacer la lib ?

    • Je suis aussi intéressé par la question dans la mesure ou une alerte de sécurité sur la librairie a été publiée dernièrement.
      Merci.

    • Il faut remplacer la lib et possiblement les chemins dans les utilisations si le nom de dossier a changé. S’il y a eu des mises à jour récemment oui faut proposer une mise à jour, si quelqu’un se sent de faire une PR sur le projet Git. Dans tous les cas ce serait mieux de faire un ticket qu’ici où c’est pour du support à l’utilisation.
      https://git.spip.net/spip-contrib-extensions/facteur/issues

    Reply to this message

  • 3
    Vincent

    Je reviens avec une petite question concernant le paramétrage de ce plugin : est-il possible d’imposer un paramétrage par fichier ?

    En effet, le même paramétrage de SMTP doit être utilisé pour toute une série de sites : déployer le plugin avec sa configuration dans /config serait un gros + !

    • C’est une fonctionnalité qui ne serait pas propre à ce plugin, et non ça n’existe pas, SPIP ne permet pas ça.

      En revanche il y a peut-être pour toi le plugin “Import/Export de configuration”, qui permet d’enregistrer une série de configuration dans un fichier (yaml je crois) qu’on peut alors importer dans d’autres sites, sans avoir à recocher ou remplir tous ces champs (mais il faut quand même faire l’opération d’importer). Ça me fait penser que ce plugin (import/export) pourrait avoir des commandes SPIP-Cli pour faire ça sans avoir besoin d’aller dans l’admin de chacun des sites.

    • Vincent

      Merci pour ce retour !
      Je vais tester ce plugin d’import/export de config ;-)

    Reply to this message

  • 2
    Vincent

    Je souhaite légèrement surcharger le template emails/texte.html dans un plugin dédié pour l’envoi des mails automatiques (interactivité).
    Mais en recopiant la même arborescence (plugins/mon-plugin-email/emails/texte.html) ce template n’est pas pris en charge : quelle(s) action(s) faut-il effectuer en plus ?

    • Ton plugin doit absolument nécessiter ou utiliser (dans son xml) le plugin à surcharger, pour être sûr de passer après, par dessus.

    • Vincent

      C’est bien cela :
      <necessite nom="Facteur" compatibilite='[4.1.0;]' />

      Merci beaucoup !

    Reply to this message

  • 1

    Bonjour,

    J’aurais bien aimer pouvoir utiliser Oauth pour se connecter avec le compte gmail pour simplifier la connexion au serveur SMTP mais cela ne semble pas possible.
    J’ai vu dans le code des traces d’authentification Oauth mais ça ne me semble pas opérationnel en l’état.
    Est ce qu’il y a moyen d’activer cela?

    Merci pour vos réponses

    • Non ce n’est pas prévu. Je ne savais même pas qu’on pouvait se connecter à un serveur SMTP par OAuth. Mais OAuth c’est pour faire de la délégation, pour le cas de la config de Facteur, en quoi ça simplifie par rapport à mettre le login pass du serveur SMTP ?

    Reply to this message

Add a comment

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 / PostgreSQL
  • 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 apparait.

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.

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