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

  • 2
    ploufplouf

    Bonjour,

    J’utilise le plugin formidable et donc le plugin facteur pour un formulaire de demande de réservation. Dans ce formulaire j’ai donc une date d’arrivée et un date de fin. L’ formulaire marche bien mais le mail reçu ne contient pas les dates entrées dans le formulaire. Il en est de même dans les consultations par l’espace privé.

    Je ne sais pas d’ou ca vient mais ca me pose des soucis donc si quelqu’un a une idée, je suis preneur.

    Merci beaucoup de votre travail.

    • Aucun rapport avec Facteur puisque c’est pareil dans l’espace privé. Mais tout est à jour sinon ? Le plugin Saisies notamment, qui contient la vues du résultat d’une date. Ce bug a déjà été reporté et a été corrigé normalement.

    • ploufplouf

      Merci, ca venait bien de saisies qui n’était pas à jour... J’ai pas pensé à regarder car je l’ai installé il y a peu de temps...

      Merci encore et bravo pour tout le boulot des développeurs

    Répondre à ce message

  • 1

    Bonjour,
    Est-ce qu’il serait possible de personnaliser également le préfixe de l’objet dans « Personnaliser ces réglages » qui est par défaut [nom du site], ce qui serait très utile lorsque le nom du site est trop grand ?
    Merci par avance :-)
    jorge

    • Ben ça ça n’a pas de rapport avec Facteur à priori, qui fournit essentiellement la fonction améliorée pour envoyer des mails. Ce sont SPIP et les plugins qui utilisent cette fonction et qui définissent le sujet du mail (deuxième argument de la fonction).

    Répondre à ce message

  • 11

    Bonjour !

    Après l’installation de « Facteur » le site n’envoie plus de notifications.

    L’envoi d’un email test depuis la page Facteur en laissant les options par défaut (PHP), affiche « erreur » et aussi (bizarrement en anglais, bien que j’utilise l’interface en français) :
    "Invalid address : paolo2@taize.frYou must provide at least one recipient email address."

    Est-ce que quelqu’un a des idées ?

    merci !

    • Bonjour,

      Peut on utiliser smtp avec gmail je rempli tout bien pourtant aucun mail d’envoyé et le test échoue ...

      Cela me mets :

      SMTP Error : Could not connect to SMTP host.

      Pour info :

      Serveur de courrier sortant (SMTP) - TLS nécessaire : smtp.gmail.com(utiliser l’authentification)
      Utiliser l’authentification : Oui
      Connexion STARTTLS : Oui (appelée SSL par certains clients)
      Port : 465 ou 587
      Nom du compte : votre nom d’utilisateur Gmail (« @gmail.com » compris)
      Adresse e-mail : votre adresse e-mail Gmail complète (nomutilisateur@gmail.com).
      Mot de passe : Votre mot de passe Gmail

    • J’ai besoin d’aide, j’ai tout inscrit correctement comme ce qui est dit de faire ...

      Cela vient de spip qui gère mal le smtp ou non ?

      Merci d’avance pour ceux qui m’aideront

    • Je recommence en mettant toutes les bonnes informations.

      Je suis en local sous WampServer, mon but est d’envoyer des mails à partir de spip d’où le plugin facteur.

      Dans la configuration du plugin facteur =>configuration du mailer

      Utiliser smtp
      Hôte : smtp.gmail.com
      Port : 465
      Requiert une authentification : j’ai mi Oui
      Nom d’utilisateur : adressemail@gmail.com
      Mot de passe : monmotdepasse
      Connexion sécurisée : ssl

      Un fois ces champs correctement renseigné :

      Je clique sur « tester » dans « Tester la configuration » et cela me mets :

      SMTP Error : Could not connect to SMTP host.

      Sinon quand je choisi « Utiliser la fonction mail de PHP » et que je refais tester cela me mets :
      Could not instantiate mail function.

      Je ne comprends vraiment pas pourquoi cela ne marche pas.

      Si quelqu’un pourrait m’aider rapidement cela serait fort aimable.

      Merci

    • Je n’ai moi-même jamais eu de compte Gmail, donc je n’ai aucune idée de la réponse. Il faudrait déjà trouver des gens avec un compte Gmail pour tester, pour savoir s’ils arrivent à utiliser le SMTP de Google...

    • Salut RastaPopoulos !
      Et auras-tu une idée comment je peux recevoir (en envoi PHP) l’erreur « You must provide at least one recipient email address. » quand j’ai bien inséré une adresse ?

      merci, P.

    • Ça fait cette erreur où ? Dans le test fourni dans la page de config ?

      Le seul endroit où ça appelle cette erreur c’est avec ce code :

      if ((count($this->to) + count($this->cc) + count($this->bcc)) < 1)

      S’il n’y a donc aucune adresse, pour aucun des trois champs de destinataires d’un mail.

      Ça fait l’erreur avec n’importe quel destinataire ?

    • Ça fait cette erreur où ? Dans le test fourni dans la page de config ?

      Oui. Quand je clique sur « Tester » sur la page .../ecrire/ ?exec=facteur

      Ça fait l’erreur avec n’importe quel destinataire ?

      J’en ai testé 3. Et aussi essayé de laisser « Utiliser les réglages du site SPIP » Toujours le même résultat.

      Sans Facteur installé, le site renvoie des notifications par email sans problème. Un formulaire CVT qui envoie des résultats par email marche sans Facteur, mais lorsque le plugin est installé le formulaire ne fonctionne plus.

      Je suppose donc qu’il s’agit d’un problème avec le surcharge de la fonction envoyer_mail. Mais je suis assez perdu pour savoir comment faire paraître le fond du problème.

      (Il s’agit d’un site test auquel je peux donner accès si on le veut.)

    • Oui il va peut-être falloir que je vois en direct, mais il faudrait surtout pouvoir tracer dans classes/facteur.php et phpmailer-php5/class.phpmailer.php à différents endroits, le contenu des variables qui contiennent les destinataires.

    • Je t’envoie des logins admin SPIP et ftp par email.
      Comme ça tu pourras regarder quand et si tu as le temps.

    • Alors première approche : avant l’erreur que tu indiques, il y a d’abord une autre erreur qui est Invalid address: ladresse@choisie.fr et ce, quelque soit l’adresse définie.

      Donc la deuxième est sûrement une conséquence de la première.

    • RastaPopoulos : Dans ce cas là dis moi une adresse qui marche avec les divers paramètres ... et je créerais à partir de cette adresse

      Merci

    Répondre à ce message

  • 1

    Bonjour,

    j’utilise Spip 2.1.10 et le plugin Facteur 1.6.2.
    Mon problème est le suivant :
    lorsque je fais des tests d’envoi depuis mon serveur local en gardant la configuration de base (envoi par fonction mail), le test est réussi et je reçois bien le mail.
    Même manipulation, même configuration sur un serveur distant, et là je reçois le message mais sans le sujet du mail et le nom de l’expéditeur (email@xxxxxxx.org au lieu de Nom Prénom en local).

    Lorsque je configure l’envoi par Smtp (Online), le test ne fonctionne pas (erreur : Warning : fsockopen() [function.fsockopen] : Forbidden port in class.smtp.php on line 122).

    Je suis dans une impasse pour le moment...quelqu’un a-t’il déjà été confronté au pb et a-t’il su le résoudre ?

    Répondre à ce message

  • 3

    Hello

    Je viens de me rendre compte que le champ nom (quand on personnalise l’adresse d’envoi) ne s’affiche pas dans mon lecteur de mail à réception d’un courrier. Effectivement dans prive_facteur.log j’ai :

    From : yffic@xxxxxxxx.com

    alors que si je regarde le code, je devrais avoir

    From : le nom saisi

    Y’a un bug quelquepart ou bien ?

    Répondre à ce message

  • 5

    Bonjour,

    Pensez-vous qu’il soit possible d’ajouter la possibilité d’un envoi systématique d’une copie des emails (cc ou bcc) vers une adresse type (ou celle du site par défaut).

    Je pense au plugin facteur car c’est le « passage obligé » des envois d’emails (quand il est utilisé bien sûr).

    J’ai pensé aussi au plugin notifications, mais il est moins centralisateur.

    Qu’en pensez-vous ? Est-ce une bonne idée ?
    En avez-vous d’autres ? Un plugin spécifique ? Une autre possibilité technique du « framework » SPIP ?

    J’ai ce besoin sur un site car les auteurs et contributeurs y sont nombreux, éparses et parfois... de passage fugace.
    Cela permettrait de s’assurer que les questions et commentaires posés sur les articles ne restent pas sans réponse.

    A+

    Luc

    Répondre à ce message

  • 9
    florent

    Bonjour,

    J’essaie d’utiliser le plugin facteur mais ça ne marche pas. Lorsque je suis dans cfg pour configurer facteur, je fais le test pour vérifier un mail test et il s’affiche le message « erreur » en haut de la fenêtre. D’où cela peut-il venir s’il vous plaît ?

    Merci par avance

    • Et habituellement les mails par PHP fonctionnent ? Et quelle est la configuration dans le Facteur : utiliser la fonction mail() de PHP ou bien un serveur SMTP ?

    • florent

      J’ai mis configuration en serveur smtp car ça semble plus simple ? est-ce qpour ça que ça ne marche pas ?

    • Si le serveur SMTP existe et que tu as mis les bons identifiants, c’est censé marché évidemment. Après certains SMTP n’acceptent d’être utilisés que depuis la connexion du fournisseur, par exemple quand c’est le SMTP d’un FAI c’est souvent seulement quand on est connecté depuis un box à lui qu’on peut utiliser son SMTP. Bref c’est au cas par cas et évidement faut mettre les bons identifiants/mot de passe.

    • florent

      Merci pour tes réponses mais j’ai encore une question.

      Est-ce que ça peut venir du fait que je travail en local avec wampserver pour le moment ?

      Merci encore pour tes réponses

    • Si on travaille en local avec une connexion internet active et qu’on a configuré un SMTP qui marche, et bien c’est censé marcher puisqu’on utilise pas la machine locale pour envoyer les mails mais on fait appel à un serveur externe.

    • florent

      C’est peut-être une question bête, mais qu’est ce que ça signifie de « configurer un SMTP » car quand je suis dans le plugin facteur et que je coche la case SMTP il n’y a pas d’options possibles. Que dois-je faire ?

    • Vous mentez monsieur ! :)

      Quand on choisit SMTP, il y a non pas un, ni deux mais SIX nouveaux champs qui apparaissent où l’on peut donner l’adresse du serveur, le port, les identifiants, etc.

    • florent

      Désolé je me suis trompé. En fait au départ j’ai essayé en cochant « PHP » et ça n’a pas marché. Ensuite j’ai essayé avec « SMTP » et ça n’a pas marché non plus. Je sui sur Gmail et j’ai complété les champs de la façon suivante à partir de ce que j’ai trouvé sur le net :

      Serveur courrier sortant (SMTP) Server – TLS requis : smtp.gmail.com (utilise l’authentification)
      Utilisation de l’authentification : OUI
      Utilisation SSL : OUI
      Port : 465 ou 587
      Nom du compte : votre nom Gmail (inclure ’@gmail.com’)
      Addresse email : votre adresse email complète (toto@gmail.com)
      Mot de passe : votre mot de passe

      Malgré ça rien ne marche. As-tu une idée ou dois-je laisser tomber ? ;)

    • .Gilles

      Salut,

      le bon réglage c’est le port 465 et ’SSL’ comme type de connexion sécurisée.
      Sinon il faut aussi que mod_ssl soit installé sur ton serveur, et que celui-ci ne soit pas black-listé. Tu es en quel environnement : dédié, mutualisé ? Chez quel hébergeur ?

      ++

      .Gilles

    Répondre à ce message

  • PS Ou bien l’ajouter dans ?exec=facteur en haut de de la page ?

    Bon week-end

    Répondre à ce message

  • 2

    Salut,

    Y a-t-il un moyen d’envoyer un mail à deux destinataires en même temps (genre « adresse1@site.com , adresse2@site.com ») ??

    J’ai testé pour le plugin Tipafriend et les mails ne partent jamais (pas d’info particulière dans le log de Facteur) ...

    Merci ;-)

    • Pour envoyer à plusieurs personne : soit avec une chaine séparée par des virgules comme tu l’as indiqué, soit avec un array PHP avec une adresse par case.

      Pour Tipafriend : jecépajeconépa. :)

    • Bonjour et Bravo Rasta,

      Je rajoute deux suggestions, car je viens de mettre a jour un site en 2.1.8 et M@J auto avec CS et une demi-douzaine de plugins (dont facteur) :
      1°/ est-il possible de documenter la possibilité de multiples adresses mail, séparées par des virgules, comme précisé ? est-il aussi imaginable de pré-paramétrer une BCC systématique comme dans Thunderbird (l’equivalent d’un _DEFINE ) à saisir dans facter_cfg ?
      2°/ à la mise a jour, je spécifie une adresse mail dans ?exec=facteur, j’ai bien sur testé (bien invité par le plugin) et j’ai eu une erreur !
      a la réflexion, j’ai controlé qu’il y avait une adresse mail dans / ?exec=configuration => il n’y en avait pas !!! d’ou sans doute la cause de l’erreur !
      j’en remets la meme, et envoi OK
      -  serait-il possible d’améliorer le bandeau « tester » pour y afficher explicitement la/les adresses mails qui vont etre utilisées...
      -  est-il obligatoire ou facultatif d’avoir un mail ET dans ?exec=configuration ET dans ?exec=facteur ?

      Mes deux sous, au royaume du soleil !!
      YannX

    Répondre à ce message

  • 2

    Bonjour,
    Je viens de mettre à jour mon spip (de 2.0.1 à 2.1.2) et j’ai installé Facteur avec succès. Mais quand je veux le configurer, un message m’indique « Fichier configurer_facteur introuvable ». Pourtant, il est bel et bien dans le rép (facteur/prive).
    Merci de me dire ce qui cloche.

    • Sébastien Inion

      J’ai le même problème et c’est quoi l’adresse IP du serveur SMTP de 1and1 stp ?

    • Essaie çà : auth.smtp.1and1.fr
      avec le port 587 au lieu de 25.
      J’ai eu le même message d’erreur que toi, j’ai donc abandonné provisoirement. Je surveille malgré tout ces échanges.Tu me diras si tu as réussi, et comment ;-)

    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