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 :

$facteur_mail_html2text = charger_fonction('facteur_mail_html2text', 'inc');
$message_texte = $facteur_mail_html2text($message_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

144 discussions

  • Problème dû à Facteur ? Je n’en sais rien donc je demande...
    Je suis en SPIP 3.0.19, Sarka-SPIP 3.2.36
    Les messages partent, les accusés de réception aussi, et tout ce beau monde arrive bien. Il reste que le contenu des messages est illisible à l’arrivée dans l’interface privée uniquement. Voir copie d’écran jointe.
    Merci d’avance ! :-/

    Répondre à ce message

  • 1

    Bonjour,

    Depuis la mise en jour 3.1.0, le plugin n’enregistre plus les informations d’authentification du serveur SMTP (le nom est bien conservé, mais pas le mot de passe ni le champ sécurité sans-SSL-TSL).

    Les tentatives de vider les caches ou de nettoyer la base sqlite (la base spip_meta:facteur_xxxx) n’ont rien donné.

    Un retour sur une version antérieure est la seule solution qui fonctionne.

    Merci par avance.

    Répondre à ce message

  • 4

    Bonjour,

    En lien avec un problème posté à http://contrib.spip.net/Mailsubscribers#forum476276

    Facteur (3.0.13) ne peut m’envoyer des courriels. Pourtant le smtp (ovh) est configuré comme mon client de courriel.

    Mailershot 1.6.5 est par ailleurs installé

    Certaines personnes ont-elle eu le cas chez OVH ?

    Cordialement,
    Pierre-Yves

    • Bonjour
      Pour le smtp chez ovh, il faut mettre dans :
      Hote = ssl0.ovh.net
      port = 445
      Requiert une authentification = oui (puis rentrer ses identifiants)
      Connexion sécurisée = SSL

      Maintenant bon courage, je pars en vacance :-D

    • Bonjour Franck,
      Et merci pour la réponse,
      Il s’agit bien de cela. Mais avec le port 465 d’après http://guide.ovh.com/ConfigurationEmail

      Celà ne marche pas encore pleinement. Ca passe par moment, à d’autre non... Un problème de communication entre serveurs de courriels ?

      Je poursuis mes investigations.

      Bonnes vacances du coup !
      Pierre-Yves

    • Jaseur Boreal

      Bonjour,

      Même probleme constaté sur un spip 3.017 chez OVh avec SMTP Configuré correctement.
      (avec aussi Mailshot ...)
      Parfois les mails de test du facteur partent, parfois ils sont bloqués avec erreur ...
      Idem , parfois les mails de Test Infolettre partent, parfois ils ne partent pas ...
      Bizarre...

      Une piste de solution ?

    • Je constate le même problème

    Répondre à ce message

  • Salut,

    pour info, la Version 2.4.5 renvoie vers une erreur 404.

    Merci pour le beau boulot en tout cas !

    Répondre à ce message

  • 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

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