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
Discussions par date d’activité
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
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 !
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
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
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
Sur Contrib c’est fait avec une des inclusions fournit par le plugin Comments.
Bonsoir,
Merci beaucoup pour ce renseignement. Je m’attèle à la tâche.
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
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
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
que faut il vérifier sur le serveur ? comment avancer à partir de là ?
merci de vos idées
Répondre à ce message
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.
Voilà : http://zone.spip.org/trac/spip-zone/changeset/51398
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
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 :
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.
Suivre les commentaires : |