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,

    spip 3.0.9 avec Facteur 2.4.5
    les mails de notifications d’inscription ou de désinscription sont tronqués.
    L’objet : <div class=« header »
    Le texte indique les balises (div, p, etc..)

    J’utilise l’envoi par smtp de mailjet.

    Ai-je fais une fause manoeuvre à l’instal ? bug ?
    Merci
    Benoît

    Répondre à ce message

  • 1

    salut,
    j’utilise ce plugin dans ma job queue et j’ai parfois des erreurs avec les filtres couleur_extraire et couleur_eclaircir_si_foncee introuvables,
    le probleme c que j’arrive pas a trouver ou se situent la declaration de ces filtres dans le code spip
    merci

    • bon, ces filtres se trouvent dans le plugin-dist filtres_images,
      donc ça doit arriver dans certains cas que le plugin facteur se met en route avant ce plugin filtres image d’ou le bug, un petit include_spip(’filtres/couleurs’) ; au passage peut être pourrait solutionner le probleme voir le filtre appliquer_filtre dans le squelette texte de facteur ...

    Répondre à ce message

  • 1

    Je suis par avance désolé de degré zéro de ma question...Mais je ne peux pas avancer sans la réponse...Encore désolé.

    Comment faire pour mettre dans un article le formulaire pour envoyer un mail via ce plugin Facteur ?

    Pour info, le plugin est installé et il marche lors de l’envoie du mail test dans la partie configuration.

    Bref, comment utiliser en mode public ce plugin ?

    Je sais...c’est une question de neophyte complet...mais je le suis en matière de php et spip...

    Merci de votre aide et soyez miséricordieux envers un humble webmaster qui se lance dans le monde « spipien ».

     ;-)

    Répondre à ce message

  • 7

    Hello,
    En activant Facteur 2.4.5 sur un SPIP 3.11.dev, le mail de test ne part pas, et plus surprenant encore, je n’ai aucun log dans /tmp/logs/facteur.log (le fichier facteur.log n’est pas créé non plus).

    A votre avis, est-ce un problème de configuration ? un problème de version ?
    J’avoue ne plus trop savoir quoi faire...

    Merci d’avance pour vos idées !

    • C’est après une mise à jour ? Avec une autre version ça marche ? Ça fait ça sur n’importe quel serveur ou sur un précis ? Si tu installes la même version autre part, ça merde toujours ? Tu laisses la méthode mail() ou tu configures un SMTP ?

    • j’ai constaté le problème lors de la mise en place d’un nouveau site en SPIP 3.11. Je viens de tester un envoi de mail avec un Facteur 2.4.5 sur un autre site en 3.09 sur le même serveur et le problème est le même : pas de logs et pas d’envoi. Dans les 2 cas j’utilise la fonction mail de php.

    • Et la fonction mail() de ce serveur marche sans Facteur ? Et la même version de Facteur sur un autre serveur où mail() marche ne fonctionne pas non plus ?

    • Parce que sinon au niveau de la librairie d’envoi (phpmailer) il n’y a pas eu de mouvement depuis fort longtemps. Les dernières modifs portent essentiellement sur l’envoi en HTML. D’ailleurs le formulaire d’envoi de test, il fait un retour en rouge avec une erreur ou il dit que le mail de test a bien été envoyé ?

      Après le mail est peut-être en greylisting chez ton fournisseur, en attente d’être renvoyé...

    • Merci Rastapopoulos pour tes réponses ;-)
      Dans les 2 cas (SPIP 3.11 et SPIP 3.09) le formulaire de facteur me renvoie bien un message "vert" : « L’email de test a correctement été envoyé... ». Ce qui est curieux aussi c’est que je ne trouve aucun log.

    • Ya rien de curieux, ya pas de log par défaut, sauf pour les grosses erreurs je crois. C’est à toi d’activer le bon niveau de log quand t’es en mode développement/debug avec http://www.spip.net/fr_article5543.html. Avec 8 tu devrais avoir tous les logs possibles.

    • En activant ce niveau de logs, j’ai pu trouver d’où vient le problème :
      the Postfix mail system is not running

      Je suis navré et désolé pour tout ce bruit pour rien...
      Merci pour l’astuce (log niveau 8) et pour le temps consacré. Tout fonctionne à nouveau parfaitement :-)

    Répondre à ce message

  • 1

    Bonjour,

    Est-ce que les utilisateurs avec une adresse mail chez ovh pourraient me renseigner svp sur les infos rentrées pour la configuration du plugin ?
    J’ai tout essayé et mon mail test ne veut pas partir...

    Merci beaucoup !

    • Désolé, c’est marqué plus bas : « En fait, ça a marché quand j’ai laissé vide le champ »Retour des erreurs

    Répondre à ce message

  • 4

    SPIP 3.0.7 [20352] Facteur 2.4.5 - stable utilise en smtp j’ai le probléme Erreur : consultez le fichier log pour plus de détails. j’ai retiré e-mai Retour des erreurs (optionnel)
    le probléme persiste je crois mais pas sur que c’est aprés la mise a jour spip 3.0.7.
    fichier mailshot_send.log Mar 23 21:21:29 81.48.219.159 (pid 3748) :Pri:ERREUR : Erreur Envoi mail via Facteur : SMTP Error : The following recipients failed : @.fr

    SMTP server error : 5.7.1 <@> : Relay access denied

    • Ben de ce que je comprends le log te dit que tu essayes d’envoyer un mail avec un destinataire vide « @.fr » où il n’y a ni l’identifiant ni le serveur. Donc si c’est ça, ça ne risque pas de marcher et ce ne serait pas Facteur en cause. Peut-être regarder plus en amont, donc Mailshot ou Mailsubscribers qui envoie un truc vide quelque part ? Ou la config du SMTP ? Mais ça a plus l’air d’être une histoire d’adresse non valide pour l’instant.

    • je m’excuse mais j’avais effacé l’email .dans le log il y a bien l’email

    • L’erreur indique clairement qu’il n’arrive pas à accéder/se connecter au serveur SMTP. Donc il y a un problème de configuration du serveur d’envoi. Problème pouvant être multiple : mauvais identifiants, mauvaise config de sécurité (SSL etc), ou aussi quand on essaye d’utiliser un SMTP d’un FAI qui interdit l’envoi depuis une autre connexion que la sienne.

    • ce n’est pas une nouvelle configuration cela marché à merveille j’ai constaté cela après avoir fait la mise à jour de 3.0.7. pour pas trop vous déranger je vais bien vérifier le smtp et faire des tests poussées mais pour moi je ne vois que la mise a jour car je n’ai rien toucher. l’info-lettre été envoyée sans problème avant.

    Répondre à ce message

  • 3

    Problème avec « Facteur » : je suis en SPIP 2.1.19, j’utilise la fonction mail de pHP ; le mail fonctionne quand je dévalide « Facteur » et ne fonctionne pas quand je le valide. Le test d’envoi de « Facteur » me donne le message suivant : « Erreur : consultez le fichier log pour plus de détails ». (quel fichier log regarder ? Bon ,j’ai quand même une idée...).
    Je vais voir dans les fichiers facteur.err.log, facteur.log... je n’ai que le message
    « Feb 21 08:58:25 ***.***.***.*** (pid 8685) Erreur Envoi mail via Facteur : Could not instantiate mail function. ».
    Je sèche sur l’origine de la « panne »... Merci de vos lumières.

    • http://permalink.gmane.org/gmane.comp.web.spip.user/179549

      Après un long monologue ( :-/), Philippe a trouvé : "En fait, ça a marché quand j’ai laissé vide le champ « Retour des erreurs (optionnel) » !
      RESOLU mais inexplicable..."

      Un bug ou pas, je sais pas, moi je kafte et je dénonce c tout ;-)

    • Merci d’avoir complété, j’aurais du le faire. ;-)

    • SPIP 3.0.7 [20352] Facteur 2.4.5 - stable utilise en smtp j’ai le probléme Erreur : consultez le fichier log pour plus de détails. j’ai retiré e-mai Retour des erreurs (optionnel)
      le probléme persiste je crois mais pas sur que c’est aprés la mise a jour spip 3.0.7.
      fichier mailshot_send.log Mar 23 21:21:29 81.48.219.159 (pid 3748) :Pri:ERREUR : Erreur Envoi mail via Facteur : SMTP Error : The following recipients failed : @.fr<p>SMTP server error : 5.7.1 <@> : Relay access denied
      </p>

    Répondre à ce message

  • Bonjour
    Je me suis trouvé devant un problème biare après l’installation du plugin facteur (spip 1.2.11).
    Le formulaire de contact n’envoyait plus les messages et indiquait éun problème technique...".
    Après moult recherches je me suis apperçu que c’était le facteur qui délivrait maintenant ce courrier, mais que le paramètre envoyé au facteur n’était pas correct si il y avait plus de 1 auteur à l’article compenant le formulaire (une chaîne de caractère comportant les deux e_mails séparés par une virgule au lieu d’un tableau d’adresse e_mail.
    J’ai résolu (temporairement) mon pb en ne laissant qu’un auteur mais serait-il possible d’avoir un patch « propre » pour résoudre ce problème (par exemplesplit de la chaine entré par une virgule pour récupérer un tableau d’adresses qui sera accepté par le facteur...
    Merci

    Répondre à ce message

  • 2

    Bonjour,

    « $destinataire : peut être le destinataire ou bien un tableau où chaque ligne contient un destinataire »

    Lorsque je passe un tableau de destinataires à la fonction envoyer_mail
    $envoyer_mail($destinataire, $sujet, $corps);

    j’ai tous les destinataires qui s’ajoutent dans le mail, fonctionnement normal me direz vous.

    d’où ma question :

    Est ce que je suis obligé de boucler sur mon tableau pour envoyer un mail à chacun des destinataires ? ou y a t’il une fonction spéciale dans spip ?

    J’ai la vague impression que en terme de performance boucler sur un tableau c’est vraiment pas terrible, surtout avec un modèle html.

    Merci d’éclairer ma lanterne

    Cordialement

    • Le mieux est d’utiliser l’API de Job Queue (plugin en SPIP 2, dans le noyau en SPIP 3), pour programmer un par un les envois de mails, qui se feront alors dès que possible en arrière plan, sans gêner personne.

    • Merci, je vais étudier ça :)

    Répondre à ce message

  • Je suis confronté à un petit problème avec le plugin facteur depuis son installation... J’ai personnalisé le squelette « nouveautes » depuis un bon bout de temps afin d’en faire un email « multipart » avec versions texte & html intégrées au squelette.

    Depuis l’installation de « facteur » l’email nouveautés est systématiquement envoyé avec un type « text/html ». Le facteur ne regarde pas ce qu’il met dans son enveloppe ;)...

    Comment faire pour forcer à nouveau l’envoi en « multipart » depuis le squelette ?

    Ci-dessous le code de mon squelette « nouveautes »...

    [[(#NOM_SITE_SPIP|textebrut)]] <:nouveautes:>
    MIME-Version: 1.0
    Content-Type: multipart/alternative; boundary="limite-contenu-actu-ymf"; charset="utf-8"
    Content-Transfer-Encoding: 8bit
    Reply-to: ***@y***.**
    
    
    --limite-contenu-actu-ymf
    Content-Type: text/plain; charset="utf-8"
    Content-Transfer-Encoding: 8bit
    
    
    LA VERSION TEXTE
    
    --limite-contenu-actu-ymf
    Content-Type: text/html; charset="utf-8"
    Content-Transfer-Encoding: 8bit
    
    
    LA VERSION HTML
    
    --limite-contenu-actu-ymf--

    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