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

  • Bonjour,

    Je souhaiterais mettre quelques contraintes pour l’envoi de pièces jointes (taille max et format...). N’étant pas développeur, je ne sais pas où, ni comment, je peux faire ces modifs, bien qu’ayant survolé les fichiers des plugins « facteur » et « contact avancé ». Je n’ai trouvé que le nbre de pièces autorisées.

    Merci d’avance !
    Laetitia

    Répondre à ce message

  • 3

    Bonjour,

    Avec Spip version 2.1.12, je mets à jour les plugins hier et depuis, j’ai un message d’erreur qui s’ouvre à la place de la page de configuration de Facteur :

    Parse error : syntax error, unexpected T_STRING, expecting T_OLD_FUNCTION or T_FUNCTION or T_VAR or ’}’ in .../plugins/auto/facteur/classes/facteur.php on line 344

    De plus, les envois automatiques de Spip pour le suivi éditorial ne se font plus (c’est cela qui m’a alerté).

    Que puis-je ?
    Merci de votre aide !

    Voldor

    • PHP 4 au lieu de PHP 5. Pourtant il me semblait que la version de Facteur pour 2.1 savait encore être compatible avec PHP 4.

      Mais bon de toute manière, il vaut mieux que tu actives PHP 5 vu que le 4 n’est plus supporté depuis longtemps maintenant et que donc c’est dangereux de l’utiliser.

    • C’est bon en PHP 5 ! Grand merci pour la réponse rapide !

    • Snakefinger

      Cette erreur Parse error : syntax error, unexpected T_STRING, expecting T_OLD_FUNCTION or T_FUNCTION or T_VAR or ’ apparaît chez free.

      Si jamais il faut mettre donc un .htaccess à la source avec :

      php 5 (mettre l’espace entre php et 5)
      (return sur la deuxième ligne, mais la laisser vide)
      (rien sur la troisième ligne)

      Et le plugin facteur fonctionne nickel

    Répondre à ce message

  • 1

    Bonjour,
    Le plugin rejete le nom de mon serveur smtp : auth.smtp.1and1.fr
    Comment faire ? Merci

    • Bonjour,
      j’ai le même problème. J’utilise spip-liste. Je viens de mettre à jour Facteur (2.2.6).
      avec la précédente version cela fonctionnait, mais le nom usuel de l’auteur n’apparaissait pas (seule l’adresse mail) , ni l’objet du mail (le titre de mon courrier).

    Répondre à ce message

  • 2
    mbourlier

    Bonjour,
    Je suis sous spip 2.1.17, Sarka-spip 3.1.0 et ma question n’est pas directement liée au plugin « facteur » mais plus généraliste. Je n’ai pas trouvé de réponse ailleurs.
    La voici : comment faire pour que le fil des discussions (les messages) du forum d’un article soit hiérarchisé, tel que sur celui-ci ? Les réponses à une question sont collées à la question et les questions séparées les unes des autres.

    C’est peut-être tout simple, mais je n’ai pas trouvé.
    Quelqu’un peut-il m’aider ?
    Merci d’avance
    Cordialement

    M. BOURLIER
    Découvrir l’autre, l’ailleurs, soi

    Répondre à ce message

  • Bonjour,

    Je suis chez OVH, sous SPIP 2.1.16 [19678], PHP 5 activé et ai activé, entres autres :
    Facteur 1.8.9
    Formulaire de contact avancé 0.8.1

    La liste complète des plugins activés est ici : http://fureurdunoir.info/spip.php?article207

    Comme d’autres, je reçois les mails envoyés sans pièces jointes et avec uniquement dans le corps du texte : Array et rien d’autre, y compris le texte initialement saisi. Les messages arrivent via PHPMailer 5.1.

    En outre, les messages sont bien présents dans la partie messages de contact du site, et les messages sont complets (texte du corps de message et pièce jointe). Il semblerait donc que ce soit lors de l’envoi que cela merdouille.

    Voilà ce que j’ai dans le httaccess :
    SetEnv PHP_VER 5
    SetEnv REGISTER_GLOBALS 0

    Je ne sais si c’est Facteur qui est en jeu ou Formulaire de contact avancé, mais comment résoudre ce problème de pièce jointe qui ne passe pas ?

    Merci.

    Répondre à ce message

  • 2

    Bonjour,

    Depuis quelques jours, je ne reçois plus mes mails qu’au format texte, impossible de les recevoir au format HTML.

    Je suis sous OVH avec SPIP 3 et j’utilise le plugin « Formulaire de contact avancé », PHP5 est activé depuis mon .htaccess

    J’avais fait une copie du dossier « email » dans mon dossier squelettes pour tenter de modifier le contenu du mail envoyé, cela a fonctionné puis j’ai commencé à recevoir mes mails au format texte. Depuis j’ai supprimé mon dossiers emails et ré-installé Facteur mais toujours sans succès :’(

    Ai-je fait une erreur quelque part ? Y-a-t-il une option cachée que j’aurai désactivé par inattention ?
    Si il vous faut plus d’info pour tenter d’identifier le problème je vous les fournirai.

    Merci d’avance !

    • À priori rien n’a changé dans le plugin sur ce point... Une modification dans ton client mail ou dans la configuration de celui-ci ? Tu reçois la même chose sur plusieurs clients mails ou plusieurs adresses différentes ?

    • Oui, j’ai fais le test sur plusieurs webmail (OVH, GMAIL, réception depuis mail dans MacOS) et j’ai toujours le même résultats.

      Vu que le problème ne vient à priori pas de facteur je ne sais pas trop quoi faire .... je vais tenter de retrouver une ancienne version du plugin « Formulaire de Contact Avancé » pour voir si le problème vient de là mais je n’y crois pas trop non plus :(

    Répondre à ce message

  • 2

    Bonjour

    J’aurais une demande de fonction, mais bon possible que cela demande tellement de boulot que...
    Alors voilà, serait t’il possible que facteur ait un réglage pour géré les quotas d’expédition de mail des hébergeurs ?
    Cela serait utile aux plugs envoyant des mails (spip-lettres, etc) pour réduire le nombre de tentative d’envoi par exemple.
    Exemples :


    Chez 1and1, c’est : http://faq.1and1.fr/hebergements/quotas/6.html (j’ai tel pour vérifier également)

    Expédition depuis les serveurs SMTP

    Les envois de mails depuis les serveurs SMTP sont soumis à des différents quotas pour des raisons de performances.
    * Connexions SMTP en parallèles : 10
    * Taille maximale d’un email : 100Mo (Mail + Pièce(s) jointe(s) )
    * Cadence pour l’expédition : 300 Mails / 5 minutes (3600 Mails / heure)

    * Expédition depuis l’Espace Web

    Les envois de mails depuis l’Espace Web via la fonction mail() de PHP sont soumis aux limitations suivantes :
    * Ratio Séquentiel : 1/seconde
    * Taille maximale d’un email : 10Mo (Possible de monter jusqu’à 50Mo en fonction du destinataire)
    * Cadence pour l’expédition : 200 000 Mails par jour


    Chez OVH, après leur avoir téléphoner, j’ai eu comme renseignements :

    Expédition depuis les serveurs SMTP

    Les envois de mails depuis les serveurs SMTP sont soumis à des différents quotas pour des raisons de performances.
    * Connexions SMTP en parallèles : illimité ( il a dit ça, mais cela me semble bizarre)
    * Taille maximale d’un email : 10 Mo (Mail + Pièce(s) jointe(s) )
    * Cadence pour l’expédition : 100 Mails / par heure (2400 Mails / jours)

    * Expédition depuis l’Espace Web

    Les envois de mails depuis l’Espace Web via la fonction mail() de PHP sont soumis aux limitations suivantes :
    * Ratio Séquentiel : 86.4 ? (86400/1000)
    * Taille maximale d’un email : 10Mo
    * Cadence pour l’expédition : 1000 par jour

    Cordialement, Franck

    • À priori c’est à un autre plugin de gérer cela. Surtout que Facteur n’envoie pas plusieurs email à la fois, c’est chaque appel à la fonction envoyer_mail() de SPIP qui envoie un mail. Donc c’est aux plugins qui utilisent cette fonction de ne pas faire n’importe quoi peut-être.

      Notamment en utilisant la fonction job_queue() pour mettre chaque envoi en fil d’attente, mais aussi peut-être en configurant cette file d’attente pour ne pas envoyer dès qu’il y a un hit PHP, mais en espaçant toutes les X minutes.

    • Merci de ta réponse :-(

    Répondre à ce message

  • bonjour ayant des soucis avec l’envoie des mails avec spip liste, je vérifie ma config et notamment le plug in « facteur » voici le messageà l’issue du test

    L’email de test a correctement été envoyé. Si vous ne le recevez pas correctement, vérifiez la configuration de votre serveur ou contactez un administrateur du serveur.

    que faut il vérifier sur le serveur ? comment avancer à partir de là ?

    merci de vos idées

    Répondre à ce message

  • 8

    Bonjour,

    Est-il possible d’ajouter une valeur spécifique pour le Reply-To ? Si oui comment ?

    Merci beaucoup,

    • Je ne me souviens plus, mais si ce n’est pas le cas il faudrait le rajouter. :)

      Faut vérifier dans le code.

    • Bon c’est pas dans le code mais PHPMailer a bien une méthode « AddReplyTo » donc ça doit pouvoir s’ajouter facilement.

    • Excusez-moi de faire le lourdeau, mais je ne comprends pas comment je dois faire pour ajouter un champ reply-fo à l’envoi des nouveautés.

      Il n’y a pas de champs dans la configuration de facteur.
      J’ai cru comprendre que c’était possible dans le squelette. Merci de donner un exemple de la chaine de caractère à mettre en début de corps pour préremplir le reply-to à toto@domaine.org

      Merci d’avance.

    • Ah mais c’est le code utilisateur du plugin qui peut ajouter un reply-to, pas l’utilisateur ni dans la config ni dans un quelconque squelette. Ça pourrait éventuellement être ajouté dans les trucs à configurer, comme il y a un champ pour la copie désormais.

    • Hé bien ça serait vraiment chouette, parce que je viens d’être confronté à un hébergement qui envoie la réponse au destinataire initial quand le reply-to est vide.

      Comme le destinataire initial était une liste, je vous laisse imaginer la pagaille que ça a créé.
      Donc une évolution souhaitable.

      Sinon, c’est possible de surcharger l’invocation de la fonction d’envoi du mail de nouveautés ? Comment je la localise ?

    • Tu parles du truc par défaut de SPIP ? Ça doit être dans un cron, dans le dossier genie/ sûrement.

      http://core.spip.org/projects/spip/repository/entry/branches/spip-2.1/ecrire/genie/mail.php

    • Complément d’info : le problème venait d’utilisateurs qui utilisaient le bouton répondre à tous, ce qui englobait aussi l’adresse de diffusion initiale. Donc cela sort du cadre de ce plugin.

      Cela dit l’idée d’un champ reply-to reste intéressante et je vous encourage à le mettre en place pour faciliter la vie des webmestres.

    Répondre à ce message

  • 3

    Bonjour,
    Je rencontre un problème avec ce plugin : l’utilisation d’une pièce jointe dans le formulaire renvoie un message avec seulement le mot Array dans le texte. Si cette fonctionnalité n’est pas utilisée, tous les autres champs du formulaire fonctionnent bien.
    SPIP 2.1.12 [18732] avec :
    Formulaire de contact avancé 0.7.4
    Facteur 1.8.5
    CFG 1.16.0
    jQuery UI 1.8.16
    Saisies pour formulaires 1.24.3
    Une piste ?

    • Je précise aussi que « Tester la configuration » à partir de la page de configuration du plugin Facteur « /ecrire/ ?exec=facteur » fonctionne très bien.

    • Ben ça peut provenir de ton code pour ajouter la pièce jointe alors. Mais je peux pas le deviner. :)

    •  ??
      Le code du formulaire, et donc celui de l’envoi de la pièce jointe, est généré par le plugin « Formulaire de contact avancé 0.7.4 »

    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