Important !
Par défaut, le facteur propose les méthodes d’envoi suivantes:
- envoi par PHP (à déconseiller)
- envoi par SMTP
A partir de la version 4.3.0 si vous utilisez un fournisseur commercial pour l’envoi des mails transactionnels (Brevo, Mailjet, Mandrill) vous devez installer en plus le plugin Mailshot pour pouvoir utiliser les méthodes d’envoi API de ces fournisseurs !
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 = [
'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
);
En cas d’échec des envois
Il arrive que les mails ne parviennent pas à leur destinataire. Dans le dossier /tmp, il y a un sous-dossier facteur consacré aux d’envois rencontrées par le plugin facteur. En y accédant (avec FileZilla par exemple) on peut y trouver 2 sous-dossiers :
- retry contient les mails en instance de réenvoi suite à premier, 2eme, 3eme essai etc
- failed contient les mails en échec définitif parce que marre ça suffit
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
Personnaliser la couleur du bandeau des emails de base
Par défaut, les emails de base ont un bandeau dont la couleur de fond est calculée d’après le logo du site.
Il est possible de personnaliser cette couleur en déclarant la constante suivante dans le fichier mes_options.php
<?php
// définir la couleur du bandeau des emails de base envoyés par le facteur
define('_COULEUR_EMAILS_HTML','#67913D');

Discussions by date of activity
149 discussions
Bonjour,
Ce message juste pour signaler une erreur dans mails/texte.html lorsque le logo est au format svg.
Forcément !
Belle journée et merci pour ce fabuleux plugin !
Hello,
svg_extract_couleursexiste pourtant bel et bien en SPIP 4.4.Quelle version de SPIP te montre cette erreur ?
Reply to this message
bonjour
plus possible d’envoyer un mail a un auteur via le formulaire de squelettes-dist depuis un changement de serveur.
SPIP 4.4.7 - Facteur 5.3.0
configurer en SMTP port 465 ssl avec authentification
par le test de facteur j’ai toujours “SMTP Error: Could not authenticate.”
si j’essaye TlS cela bloque et j’ai SMTP Error: Could not connect to SMTP host. dans log
j’ai essaye port 465 et aussi port 587 idem
avez vous une idée du problème
merci
quel hebergeur ?
c’est bon j’ai trouvé pas de problème avec facteur. C’est juste un changement de mot de passe.
cela fonctionne dans tous les cas TlS, SSl, port 465 et aussi port 587.
hébergeur : infomaniak. - SPIP 4.4.7 - Facteur 5.3.0
merci
Reply to this message
Salut,
Je rencontre un problème d’authentification avec une configuration pour l’envoi via un SMTP.
Des infos du journal ci-après.
SPIP\Facteur\FacteurMail: 1: CLIENT -> SERVER: AUTH CRAM-MD5
SPIP\Facteur\FacteurMail: 4: Auth method selected: CRAM-MD5
SPIP\Facteur\FacteurMail: 4: Requested auth method not available:
SPIP\Facteur\FacteurMail: 4: Auth methods available on the server: DIGEST-MD5,NTLM,CRAM-MD5,PLAIN,LOGIN
Je sais que le serveur concerné accepte le mot de passe uniquement en PLAINTEXT...
Merci d’avance pour votre aide !
S.
Autres infos à vous préciser :
- connexion sécurisée SSL par une Autorité de Certification (Let’s Encrypt);
- le SMTP fonctionne selon un SPF (avec alignement du ReturnPath) et un DMARC valides, mais pas de DKIM;
- le SMTP fonctionne très bien (testé avec Thunderbird).
Reply to this message
Bonjour.
Nous observons un bug dans l’envoi des emails avec le plugin Facteur sur plusieurs sites.
Nous avons supprimé les lignes ci-dessous et cela fonctionne à nouveau.
Pourriez-vous vérifier s’il s’agit d’un bug général et le corriger ou si cela se limite à nos sites ?
Il suffit d’envoyer un mail de test pour le savoir. Le corps du message est vide et grisé.
Merci d’avance de votre aide.
Bonjour, ce bug est toujours présent. Plus précisément, il vient du fait que la partie CSS est envoyée de manière tronquée, ce qui fait que le HTML n’est pas correctement interprétée.
Avez-vous une idée de ce qui peut en être la cause ?
Merci à vous !
Reply to this message
Bonjour,
J’aurais bien aimer pouvoir utiliser Oauth pour se connecter avec le compte gmail pour simplifier la connexion au serveur SMTP mais cela ne semble pas possible.
J’ai vu dans le code des traces d’authentification Oauth mais ça ne me semble pas opérationnel en l’état.
Est ce qu’il y a moyen d’activer cela?
Merci pour vos réponses
Non ce n’est pas prévu. Je ne savais même pas qu’on pouvait se connecter à un serveur SMTP par OAuth. Mais OAuth c’est pour faire de la délégation, pour le cas de la config de Facteur, en quoi ça simplifie par rapport à mettre le login pass du serveur SMTP ?
https://support.google.com/a/answer/14114704?hl=fr
«À partir de l’automne 2024, vous et vos utilisateurs devrez utiliser OAuth avec les applications tierces pour accéder à Gmail, Google Agenda et Google Contacts. [...] L’accès ne se fera plus via un mot de passe (à l’exception des mots de passe d’application). Google désactive l’accès aux applications moins sécurisées, c’est-à-dire les applications n’appartenant pas à Google qui peuvent accéder à votre compte Google à l’aide d’un nom d’utilisateur et d’un mot de passe (authentification de base).»
J’utilise un relai SMTP Google pour l’envoi de mail depuis un site, le problème en effet se poser avec le plugin Facteur.
est ce qu’il y a quelque chose de prévu pour implémenter l’authentification Oauth ou est ce que c’est possible d’en intégrer une à travers les pipelines car cela devient de plus en plus pressant. Outlook viennent de désactiver la possibilité d’utiliser les mots de passe des applications et je pense que d’autres ne tarderont pas à suivre.
J’ai tenté de regarder dans le code, il y a bien une fonction facteur_lister_methodes_mailer permettant de définir une méthode surchargeable par pipeline.
Est ce qu’il est prévu de supporter Oauth dans un avenir proche?
Si pas pour le moment est ce qu’il est possible de le faire sans trop de risque à travers une nouvelle classe FacteurOauth que l’on créerait.
En vous remerciant
Bonjour,
Pour continuer à utiliser Gmail comme serveur SMTP, j’ai contourné le problème en définissant un mot de passe d’application depuis mon compte Google (non Workspace). Si ça peut aider...
Bonjour Samuel,
Merci pour le retour. En effet c’est ce que j’utilise jusque là mais Microsoft viennent de supprimer la possibilité d’utiliser les mots de passe des applications et je craint que cela ne soit à plus ou moins long terme suivi par google.
J’ai toutefois si cela peut aider pu mettre cela en place en exploitant les méthodes d’authentifications utilisées par factuer. Comme phpmailer supporte la méthode Oauth j’ai introduit via un plugin à travers le pipeline facteur_lister_methodes_mailer la configuration de la méthode oauth avec les parametres requis (client_id, client_secret,...) et j’ai ajouté dans mon plugin la méthode FacteurOauth. Il faut bien sûre prévoir à coté la mécanique nécessaire pour la demande d’authorisation mais tout fonctionne maintenant.
Reply to this message
Bonjour,
SPIP 4.2.15, Facteur 5.2.0
Je n’arrive pas à faire fonctionner l’option de la configuration : “Adresse de retour des erreurs (optionnel) (Définit dans l’entête du mail l’adresse email de retour des erreurs (ou Return-Path)”.
Qui n’est pas définie ici d’ailleurs.
J’en ai vraiment besoin !
Que faire ?
Merci. beaucoup.
Reply to this message
Pour info, config SMTP OVH qui fonctionne sur un MX plan en avril 2024
- hôte : ssl0.ovh.net
- port : 465
- utilisateur : l’email entier
- connexion sécurisée : SSL (déprécié)
- SSL : le certificat SSL du serveur SMTP est émis par une Autorité de Certification (recommandé).
Reply to this message
Je suis en train de tester une installation de Spip 4.2 avec le Plugin Sarka-Spip sur une MV en NAT elle-même installée sur un PC portable. Je suis un particulier abonné Orange. Installation du site Ok, connexion locale et publique Ok, j’en suis venu à tester l’envoi de mail (pour la génération de mot de passe par ex.) et là cela n’a pas fonctionné.
Après quelques recherches j’ai fini par installer le plugin Facteur et configurer son envoi par SMTP avec comme hôte smtp.laposte.net (oui je sais j’aime compliquer les choses), tout fonctionne correctement SAUF lorsque dans la configuration de Facteur je mets en copie (cachée ou non) mon adresse orange et que je teste un envoi sur cette même adresse
Ce n’est pas dramatique me direz-vous si ce n’est du qu’à l’identité des adresses et non à l’identité du domaine @orange.fr, mais est-ce normal ? En effet je ne vois pas pourquoi cela ne fonctionne pas.
Reply to this message
Bonjour, j’ai un problème avec le couple Formidable/Facteur.
J’utilise Facteur avec la configuration SMTP. Lorsque j’envoie le mail de test, je le reçois bien.
nous avons configuré notre formulaire de dons pour en recevoir une copie par mail, en plus de l’enregistrement.
Mais lorsque les internautes utilisent notre formulaire de dons, la procédure se déroule bien, les dons se font via l’interface de paiement, mais nous ne recevons pas de mail de confirmation.
Dans les logs de Facteur, j’ai le message :
“2023-12-19 17:30:48 51.68.11.203 (pid 16472) :Pub:ERREUR: SPIP\Facteur\FacteurSMTP: parent::Send() : SMTP connect() failed. https://github.com/PHPMailer/PHPMailer/wiki/Troubleshooting”
Je vous joins une impression d’écran de ma config de facteur, si cela peut vous donner des idées.
Le plugin est à jour, mais je suis encore sous Spip 4.0.11
Bonne soirée,
Éric LM
Reply to this message
J’ai un problème depuis cet été : environ 10% des mails d’une liste avec 890 inscrits ne sont pas delivrés. Les adresses mail sont pourtant valides.
Le journal du plugin facteur indique pour chacun de ces mails non-délivrés :
SPIP\Facteur\FacteurSMTP: parent::Send() : SMTP connect() failed.
Je ne vois pas ce que ça peut être. Avez-vous une idée ?
Méthode d’envoi : Mailjet.
Spip : 4.2.2.
Facteur : 5.0.5
Mailshot : 3.0.12
Hello, dans la majorité des cas, ce n’est pas dans SPIP que tu peux voir ça, mais bien chez ton prestataire, en l’occurrence là Mailjet. Donc il faut aller dans leur interface d’admin, et voir les divers retours et erreurs rencontrées.
Reply to this message
Add a comment
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.
Follow the comments:
|
