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,
Quand je veux mettre Facteur, j’ai un message d’erreur sur les pages de gestion des plugins, à la place de listes de plugins :
Fatal error : Call to undefined function plugin_get_infos() in plugins/facteur/base/facteur.php on line 6
Sur Spip 2.1, avec CFG, Crayons, Forms et Tables (que je voudrais remplacer justement, car bugs), Spip-listes, Bonux, thickbox2
Après vidage de cache, rien ne change. Que faire ?
Je me réponds. Ca marche à présent.
Apparemment, un problème lors du chargement ftp ou un télescopage avec une ancienne version...
Je vais pouvoir tester le plugin Formidable.
Répondre à ce message
J’ai trouvé, en fait j’initialisais pas mon tableau de pièce jointe de manière correcte, voici comment procéder :
$corps = array(
’html’ => $message,
’pieces_jointes’ => array(
array(’chemin’ => $chemin_destination.$_FILES[’pj’][’name’],
’nom’ => ’azerty’,
’encodage’ => ’base64’,
’mime’ => ’image/jpeg’)
)
) ;
Et en effet faut rajouter le chemin complet ;) Si tu pouvais rajouter cet exemple dans la doc ca pourrait aider les futurs utilisateurs de ce super plugin ;)
Merci encore RastaPopoulos
Ah oui la faute à la con, genre oublier un point virgule. C’est toujours là-dessus qu’on passe le plus de temps.
Effectivement la doc dit :
Exact, un truc a se tirer les cheveux, tout marche nickel maintenant c’est le principal ;)
Répondre à ce message
Bonjour,
J’essaye d’utiliser le plugin facteur pour l’envoi de pieces jointes par mail dans le formulaire de contact,
Cependant quand j’envois mon mail il m’affiche une erreur a l’écran :
Could not access file : C Could not access file : i
Voici comment j’ai paramétré le corps de ma fonction mail :
$corps = array(
’html’ => $message,
’pieces_jointes’ => array(
’chemin’ => $chemin_destination,
’nom’ => $_FILES[’pj’][’name’]
),
) ;
La structure vous parait elle bonne ?
Et bien je n’en sais rien... « Could not access file » veut à priori dire ce que ça veut dire. :) C’est-à-dire qu’il n’arrive pas à accéder au fichier voulu, donc possiblement que le chemin n’est pas bon. En affichant var_dump() le contenu du chemin, ça donne quoi ? C’est un chemin qui existe et qui pointe bien un fichier ?
Bonsoir RastaPopoulos et merci de bien vouloir m’apporter une aide ! :p
Pourtant le chemin ou mon fichier est uploadé est bon (je l’ai meme indiqué en dur dans mon code)
et le fichier uploadé est bien transféré dans ce dossier.
C’est peut etre ce dossier que j’ai indiqué en dur qu’il n’aime pas, je vais du coup essayer de faire autrement.
La syntaxe des options de pieces_jointes est bonne sinon ? c’est bien un sous tableau de $corps ?
Merci.
Voici en gros ce que fais ma fonction formulaires_contact_traiter_dist(){}
function formulaires_contact_traiter_dist()
$chemin_destination = ’C :/wamp/www/monprojet/squelettes/upload/’ ;
//je déplace mon fichier uploadé vers le chemin de destination.
move_uploaded_file($_FILES[’pj’][’tmp_name’], $chemin_destination.$_FILES[’pj’][’name’]) ;
/*Chargement de la fonction*/
$envoyer_mail = charger_fonction(’envoyer_mail’,’inc’) ;
$email_to = ’monemail@email.com ;
$email_from = _request(’email’) ;
$sujet = ’sujet’ ;
$message = _request(’nom’) ;
$corps = array(
’html’ => $message,
’pieces_jointes’ => array(
’chemin’ => $chemin_destination,
’nom’ => $_FILES[’pj’][’name’],
’encodage’ => ’base64’,
’mime’=> ’image/jpeg’
),
) ;
//go email.
$envoyer_mail($email_to,$sujet,$corps,$email_from) ;
return array(’message_ok’=> _T(’email_succes’)) ;
Raaaah toute mes excuses, la documentation est fausse je crois. « chemin » doit être le chemin complet du fichier : pas juste du dossier. Donc /dossier/dossier/fichier.
Testes avec ça et si c’est bien le cas je modifie la doc.
Malheureusement, j’ai rajouté le chemin complet dans l’envoi du mail mais ca fait toujours la même erreur.
$corps = array(
’html’ => $message,
’pieces_jointes’ => array(
’chemin’ => $chemin_destination.$_FILES[’pj’][’name’],
’nom’ => $_FILES[’pj’][’name’],
’encodage’ => ’base64’,
’mime’=> ’image/jpeg’
Mais peut être qu’il faut l’ajouter quand même ;) à tester.
Répondre à ce message
bonjour,
j’avais utilisé facteur dans ses précédentes versions et là j’ai un problème : facteur vérifie la syntaxe du serveur smtp et refuse l’écriture d’une simple adresse ip.
je comprend la volonté de vérifier mais pour moi c’est bloquant. ou peut-on retirer cette vérification ?
j’ai cherché mais je n’ai pas réussi a l’enlever
merci
bon ca y est j’ai trouve
commenter les lignes 43 et 44 de /formulaires/configurer_facteur.php
Je viens de corriger le plugin pour que la validation soit un peu plus robuste et accepte une adresse IP, mais en ajoutant un controle de validité du host rentré (par une requete DNS)
Répondre à ce message
Je me réponds à Moi même et aussi E-Papoulos que je remercie
Oui le plugin Facteur remplace SMTP mail avec sarrkaspip3.0.3 et spip2.0.10 car cela marche chez moi.
Toutefois je n’arrive pas à mettre plusieurs personnes comme destinataire de
Formulaire de conatct avance - évolué ou est ce qu’il faut cocher je ne voie pas trop
Par aillers sur sur le squelette sarkaspip3.0.3
Au lieu que le formulaire se mette à la place de noistte formualire - conatct générique à gauche il reste comme une rubrique à part entière ;
Et qd je clique sur noisette conatct générique de sraka à gauche, ceci me marque ce message curieux
ERREUR 404 ;
L’adresse URL que vous demandez n’existe pas. Le Plan du site peut vous aider à trouver l’information recherchée.
Répondre à ce message
Bonjour ; Mail SMTP plugin ne marcherait plus IL SERAIT REMPLACE PAR FACTEUR
POUR FORMULAIRE DE CONTACT AVANCE PEU T - ON PRENDRE FACTEUR EN LOCAL SUR WAMP SVP
Le mail smtp ne marche plus sur les toutes dernières versions de sarkaspip3.0.3 et spip2.0.10
En local sur wamp 1.7.0
Dans configuration avancée dans spip2.0.10
On a bien la Boite de dialogue
Mais quand on remplit
ex :
smtp-q.otsqm.fr (*)
port : 25
J’ai bien fait les changements dans php.ini
remplacé Localhost par ceci ci6dessus :(*)
Il ne prend pas en compte
C.a.d quand je valide sous spip 2.0.10
La validation ne se fait pas ???
Doc quand j’envoie de message dans le formulaire de
Formulaire de conatct avance / évolué que j’ai installé
Le message n’arrive pas à ma boite d’ e-mail
Ni de personnes ?
est ce que quelq’un a une solution SVP je suis vraiment bloqué
Merci de votre aide SVP
J’ai pas tout compris. Et je ne connais pas Mail SMTP (à part que c’est le vieil ancêtre de Facteur). Donc je ne sais pas trop quoi dire, à part d’installer tout simplement Facteur et de le configurer.
Répondre à ce message
Bonjour
Juste un truc qui m’embete un peu, c’est le fait que le mot de passe smtp s’affiche en clair... Ca ne serait pas possible d’utiliser plutot un field password qui affiche des etoiles (histoire que les autres admin ne voient pas mon mot de passe) ?
Si, c’est d’ailleurs comme ça que c’était avant que Cédric change le formulaire de config en un formulaire CVT propre. Mais ça ne changerait pas grand chose pour vous : un champ password ne fait RIEN : il suffit de modifier le type=« password » en type=« text » dans Firebug (ou autre outil de webmaster), et hop on lit le contenu du champ.
Je ne sais plus si c’est le cas, mais il faudrait surtout que la config de Facteur ne soit fait que par les comptes « webmaster » et non pas les comptes simplement « admin ». Dans ce cas, seules une ou deux personnes autorisées pourraient voir ce champ.
Oui, je sais qu’avec Firebug on peut dévoiler les étoiles... mais déjà ca serait un acte de « piratage » de le faire... Les admins non webmestres ne sont pas généralement des développeurs. Bref ca serait déjà ca. Si Cédric peut remettre le bon type, ça serait mieux.
Et je viens de tester la config, elle accessible aux admins... Et oui, ça serait bien de la limiter aux webmasters.
Répondre à ce message
Bonjour
comment fait-on pour restreindre en fonction de leurs extensions les fichiers en pièces jointe ?
je veux garder les doc, pdf, docx
merci d’avance
Répondre à ce message
Bonjour,
Depuis plusieurs jours j’essaie d’utiliser conjointement Facteur et Clevermail 2.
J’ai paramétré le Facteur de 2 manières sur OVH, les 2 m’envoient bien le mail de tests avec les accents.
D’après ce que j’ai compris, le Facteur passe toutes les minutes ... et pourtant j’ai plusieurs messages fabriqués par Clevermail2 que le Facteur n’arrive pas à relever.
Je n’arrive pas à trouver ce qui se passe, quelqu’un a t-il déjà eu ce type de problème ?
Quels tests je peux lancer manuellement ?
Merci de votre aide.
ps : Je suis en SPIP 2.0.10, plugin Bonux, Facteur, CFG, Clevermail2 sur un hébergement OVH 90
Euh le facteur il fait rien du tout ! C’est juste un outil pour avoir plus d’options dans l’envoi de mails. Mais ça fait rien de lui-même. Donc le problème est à priori plutôt du côté de tel ou tel plugin qui l’utilise.
Merci pour ce retour rapide.
Je vais donc repartir sur Clevermail qui utilise le Facteur.
Répondre à ce message
Bonjour !
Ce plugin semble très utile.
Malheureusement je n’arrive pas à récuperer les valeurs des champs type « file » depuis les données du formulaire pour les utiliser dans le tableau pieces_jointes. J’ai essaié _request en plusieures variations, mais sans succés.
Je suis sûr que la solution est triviale ... un petit exemple serait néanmoins extrêmement bienvenu :-)
Ce n’est pas vraiment en rapport avec ce plugin, mais tout simplement à l’utilisation des fichiers envoyés dans un formulaire HTML vers un script PHP :
Chargements de fichiers par méthode POST
Lors d’un envoi de formulaire, les fichiers ne sont pas dans le _request() mais sont dans la variable globale
$_FILES
.Vous pourrez trouver des exemples d’utilisation dans le code du plugin Médiathèque ou du plugin Contact avancé.
Merci de me diriger vers le plugin « Contact avancé » — cet exemple m’a permis de conçevoir mon propre formulaire. J’avais déjà compris que les données des fichiers postées se trouvent dans $_FILES, ce qui me manquait était la méthode de les passer d’une étape du processus à l’autre (vérifier -> traiter le formulaire). Au debut j’ai esperé que ça soit possible en utilisant « _request » ou une autre fonction déjà présente dans SPIP et je n’avais pas encore realisé qu’il faut coder ça moi-même ;-)
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 : |