Facteur

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

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

Facteur (1.8.11)

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.

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 :

  1. 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 :

  1. 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 :

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

-  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

Dernière modification de cette page le 13 février 2019

Discussion

120 discussions

  • 1

    Pour info la dernière mise à jour (3.0.20) à fait sauter la configuration.
    Bon je l’ai remise mais du coup ma newsletter est partie avec un peu de retard...

    Répondre à ce message

  • Attention, la maj v3.0.20 du plugin Facteur n’est pas renseignée pour la lame mise-à-jour automatique du plugin « Le Couteau Suisse »... Ce qui provoque une erreur avec le plugin Formidable pour l’envoi des formulaires...

    Fatal error : Call to undefined function facteur_mail_html2text() in /var/www/vhosts/monsite.truc/httpdocs/plugins/auto/formidable/traiter/email.php on line 114

    Je remonte l’info auprès du couteau suisse et de formidable.

    Merci

    Répondre à ce message

  • 3

    Bonjour,
    J’utilise facteur via un plugin fait maison qui envoie une liste de mail via le cron de spip à une cadence donnée (un peu comme mailshot, mais pour des raisons particulière j’ai réécrit un plugin).
    Le plugin facteur est configuré en envoi smtp. Je l’appelle via la fonction envoyer_mail.

    // envoi du message
    $envoyer_mail(
    "emmanuel.xxx@gmail.com", 
    $titre, 
    $corps, 
    $from = "contact@monsite.com", 
    $headers = "");

    Tout se passe à merveille, je reçoit bien mes 2500 mails en 24h comme prévu. Simplement dans les logs, j’ai 2500 erreurs du type :

    Nov 18 12:43:50 92.243.14.120 (pid 28865) :Pub:ERREUR : mail via facteur
    Date : Tue, 18 Nov 2014 12:43:50 +0100
    Return-Path : espace.membre@monsite.com
    To : emmanuel.xxx@gmail.com
    From : Mon site <contact@monsite.com>
    Subject : Espace membre en ligne
    Message-ID : <e77f792722c75c15a2bb833d16242838@www.monsite.com>
    X-Priority : 3
    X-Mailer : PHPMailer 5.1 (phpmailer.sourceforge.net)
    Errors-To : espace.membre@monsite.com
    MIME-Version : 1.0
    

    Destinataire:Array
    ( [0] => emmanuel.xxx@gmail.com )

    Et là je ne comprends pas...

    Répondre à ce message

  • Bonjour,

    Depuis un moment je ne reçoit que des messages « Echoue d’envoi »

    « SMTP error from remote mail server after end of data : »

    Quelqu’un peut donner de l’aide svp. Merci.

    NB : j’utilise spip 3.0
    Plugins : Facteur, MailSubscribers, MailShot et Newsletters.

    Répondre à ce message

  • Bonjour,

    dans la version 3.0.18 de ce plugin il est fait référence à une balise #LOGO_NOTIFICATION dans le fichier emails/inc-haut.html.

    Comment peut-on renseigner ce logo de notification ?

    merciii
    P

    Répondre à ce message

  • 1

    Bonjour,

    Merci pour ce plugin, que j’utilise avec bonheur depuis plusieurs années.

    Suite à un changement de la config du serveur sur lequel je me trouve, j’ai dû modifier l’usage du plugin « facteur » : le serveur SMTP n’est plus accessible en « localhost » comme auparavant, mais je dois me connecter sur autre serveur, avec authentification, pour pouvoir envoyer du mail.

    Problème, alors que je suis absolument sûr de la config (le webmail Roundcube, sur la même machine et le même serveur SMTP, fonctionne sans problème), « facteur » me répond invariablement « Ce nom d’hôte n’est pas correct » et refuse d’enregistrer la nouvelle config.

    Avez-vous déjà rencontré ce problème ? Auriez-vous éventuellement quelques pistes à me donner pour résoudre ce problème ?

    Précisions utiles : j’utilise la version 1.8.9 de « facteur » sur un SPIP 2.1.26, sur une machine Debian Wheezy dont tous les paquets sont à jour.

    • Je reviens à ce problème.

      Nous avons identifié un bug : la regex a la ligne 50 du fichier formulaire/configurer_facteur.php, qui contrôle la validité du nom d’hôte, ne permet pas d’utiliser des noms avec plus de trois parties. Mais elle permet par contre d’utiliser des caractères de ponctuation, ce qui n’a pas de sens.

      En la remplaçant par ';^[[:alnum:]]+((.?|-*)[[:alnum:]]+)*$;', il devient possible d’enregistrer la configuration d’un serveur SMTP dont le nom d’hôtes compte plus de trois parties.

      Mais l’envoi ne fonctionne toujours pas... on continue à chercher.

    Répondre à ce message

  • 4

    Bonjour suite aux mises-à-jour de différents plugins, j’ai l’erreur suivante :
    Warning : include_once(/var/www/vhosts/frsel.be/httpdocs/ecrire/../plugins/auto/facteur/phpmailer-php5/class.phpmailer.php) [function.include-once] : failed to open stream : Permission denied in /var/www/vhosts/frsel.be/httpdocs/ecrire/inc/utils.php on line 969

    Warning : include_once() [function.include] : Failed opening ’/var/www/vhosts/frsel.be/httpdocs/ecrire/../plugins/auto/facteur/phpmailer-php5/class.phpmailer.php’ for inclusion (include_path=’. :’) in /var/www/vhosts/frsel.be/httpdocs/ecrire/inc/utils.php on line 969

    Fatal error : Class ’PHPMailer’ not found in /var/www/vhosts/frsel.be/httpdocs/plugins/auto/facteur/classes/facteur.php on line 22

    Répondre à ce message

  • 1

    Bonjour,

    J’utilisai Facteur avec la version Spip précédent la 3.0.17 avec facteur 2.4.5 et la ligne :
    [<img src="#URL_SITE_SPIP/(#LOGO_ARTICLE|top|right|image_reduire{100,}|extraire_attribut{src})">]

    Cela me donnait :
    <img src="http://www.golias-editions.fr/local/cache-vignettes/L72xH100/arton5225-4d7ff.png">

    Mais maintenant avec spip 3.0.17 et facteur 3.0.13 j’ai :
    <img src="cid:0b2e77c444267ed6ca77e1a52cb74f19">
    Le courriel envoyé possède bien les images MAIS en pièces jointes et elle ne sont plus disponible dans le texte.

    Comment retrouver les bonnes adresses des images ?

    Merci Alain

    • Bonjour,

      Je me réponds à moi même,
      Il suffisait de décocher embarquer les images ... dans le pavés filtre de la configuration de facteur ! :

      Filtres
          Des filtres peuvent être appliqués aux emails au moment de l’envoi.
          Embarquer les images référencées dans les emails
          Convertir en ISO-8859-1

      Et ça marche bien. MErci aux concepteurs. Alain

    Répondre à ce message

  • 1

    Bonjour
    J’en perds mon latin et j’appelle au secours.
    J’ai installé le plugin facteur. Sans souci. Quand je veux faire un test avec la fontction phpo il ne se passe rien. Enfin le truc se met en arrière plan, je ne peux plus toucher aux paramètres du module et le déboggage (couteau suisse) me donne cela :

    Notice: Undefined variable: terminaison in /home/sneccftc/public_html/ecrire/inc/filtres_images_lib_mini.php on line 162
    
    Notice: Undefined variable: terminaison in /home/sneccftc/public_html/ecrire/inc/filtres_images_lib_mini.php on line 165
    
    Notice: Undefined variable: terminaison in /home/sneccftc/public_html/ecrire/inc/filtres_images_lib_mini.php on line 208
    
    Notice: Undefined variable: terminaison in /home/sneccftc/public_html/ecrire/inc/filtres_images_lib_mini.php on line 265
    
    Notice: Undefined variable: terminaison in /home/sneccftc/public_html/ecrire/inc/filtres_images_lib_mini.php on line 162
    
    Notice: Undefined variable: terminaison in /home/sneccftc/public_html/ecrire/inc/filtres_images_lib_mini.php on line 165
    
    Notice: Undefined variable: terminaison in /home/sneccftc/public_html/ecrire/inc/filtres_images_lib_mini.php on line 208
    
    Notice: Undefined variable: terminaison in /home/sneccftc/public_html/ecrire/inc/filtres_images_lib_mini.php on line 265
    
    Notice: unserialize() [function.unserialize.php]: Error at offset 0 of 329 bytes in /home/sneccftc/public_html/ecrire/inc/filtres_images_lib_mini.php on line 514
    
    Notice: unserialize() [function.unserialize.php]: Error at offset 0 of 329 bytes in /home/sneccftc/public_html/ecrire/inc/filtres_images_lib_mini.php on line 534
    
    Notice: unserialize() [function.unserialize.php]: Error at offset 0 of 329 bytes in /home/sneccftc/public_html/ecrire/inc/filtres_images_lib_mini.php on line 514
    
    Notice: unserialize() [function.unserialize.php]: Error at offset 0 of 329 bytes in /home/sneccftc/public_html/ecrire/inc/filtres_images_lib_mini.php on line 534
    
    Notice: Undefined variable: terminaison in /home/sneccftc/public_html/ecrire/inc/filtres_images_lib_mini.php on line 162
    
    Notice: Undefined variable: terminaison in /home/sneccftc/public_html/ecrire/inc/filtres_images_lib_mini.php on line 165
    
    Notice: Undefined variable: terminaison in /home/sneccftc/public_html/ecrire/inc/filtres_images_lib_mini.php on line 265
    
    Notice: unserialize() [function.unserialize.php]: Error at offset 0 of 329 bytes in /home/sneccftc/public_html/ecrire/inc/filtres_images_lib_mini.php on line 514
    
    Notice: unserialize() [function.unserialize.php]: Error at offset 0 of 329 bytes in /home/sneccftc/public_html/ecrire/inc/filtres_images_lib_mini.php on line 534
    
    Notice: Undefined index: pieces_jointes in /home/sneccftc/public_html/plugins/auto/facteur/inc/envoyer_mail.php on line 48
    
    Notice: Undefined index: nom_envoyeur in /home/sneccftc/public_html/plugins/auto/facteur/inc/envoyer_mail.php on line 49
    
    Notice: Undefined index: cc in /home/sneccftc/public_html/plugins/auto/facteur/inc/envoyer_mail.php on line 51
    
    Notice: Undefined index: bcc in /home/sneccftc/public_html/plugins/auto/facteur/inc/envoyer_mail.php on line 52
    
    Notice: Undefined index: repondre_a in /home/sneccftc/public_html/plugins/auto/facteur/inc/envoyer_mail.php on line 53
    
    Notice: Undefined index: adresse_erreur in /home/sneccftc/public_html/plugins/auto/facteur/inc/envoyer_mail.php on line 54

    Je ne recois pas de courriel !!

    Répondre à ce message

  • 2

    Bonjour,
    Partisan de la sobriété, je recherche le moyen de de forcer le « mode texte » pour chaque mail envoyer par facteur. J’ai bien tenter de surcharger et modifier /emails/texte.html mais le résultat est loin d’être propre (des balises html apparaissent toujours dans le corps du message). Merci pour vos réponses.

    • Juste avec un squelette je ne sais pas. Je me dis que ça devrait plutôt être une option dans la config de Facteur… Faudrait que je vois avec Cédric qui avait ajouté ce « wrapper » HTML quand l’email de base n’est qu’un texte brut.

    • Merci Rasta, j’explore cette voie mais si Cédric possède l’astuce, qu’il n’hésite pas à nous en faire profiter ;)

    Répondre à ce message

Ajouter un commentaire

Qui êtes-vous ?

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