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 by date of activity
25 discussions
Bonjour,
J’ai détecté ce qui me semble être une anomalie dans la lib mardownify en PHP 8, quand j’utilise la fonction facteur_mail_html2text j’ai une fatal si j’ai des tags HTML qui n’existe pas dans les fonctions flushStacked_XXX de la lib, en cause :
call_user_func(array(&$this, 'flushStacked_' . $tag));
Corrigé par :
Cette limitation de tag est-elle voulu ? Je trouve que c’est assez limitant vu qu’on ne peux même pas mettre un
Reply to this message
Petite astuce: dans le cas d’OVH et d’un SMTP sendinblue
il faut indiquer le port 2525 (le port 587 ne fonctionne pas)
Reply to this message
Bonjour,
J’ai un site sous Spip 4.1.7 / Facteur 5.0.4 sur un serveur Debian 11 / PHP 7.4.33.
Postfix est bien installé, j’ai testé l’envoi de mail depuis la ligne de commande, tout passe bien.
J’ai également testé la fonction mail() de PHP, qui fonctionne également, depuis un script indépendant.
Quand j’essaie d’envoyer un mail de test par Facteur, j’ai ce message d’erreur :
Could not instantiate mail function
Que faire ?
Ah tiens, J’ai fini par trouver..
Erreur dans la config de postfix j’avais ces messages
postfix/postdrop[322784]: warning: uid=33: File too large postfix/sendmail[322783]: fatal: www-data(33): message file too big
Donc j’ai ajouté un parametre dans la config
message_size_limit=0
Et ca marche !
Désolé pour le bruit
Reply to this message
bonjour,
un problème de configuration pour l’utilisation avec sendinblue sur un nouveau site...
cela fonctionne pour d’autres sites (identiques à la version spip4 près)
il y a peut-être eu un changement coté sendinblue car les anciens site sont configurés avec un expéditeur validé par des entrées TXT du DNS, alors que sur mon nouveau site, il me demande de valider le domaine lui-même... ou sinon, vérifie l’expéditeur par mail...
En tout cas, vu de spip/facteur, je ne vois pas de différence
et le constat, c’est que les logs spip semblent indiquer que le mail est parti, alors que les logs sendinblue ne voient rien (et que le mail n’arrive pas !)
merci d’avance d’une piste...
coté log facteur
et aussi un log que je ne connaissais pas (sans doute parceque j’ai activé le debug total ?)
et coté sendinblue.... rien
un élément de plus
sur une lettre mailshot, les envois ne démarrent pas
et j’ai dans le log facteur bulksendinblue
je ne sais pas ce que ca veut dire...
Reply to this message
Bonjour
:Facteur v5.0.4 spip 4.1.5
j’ utilise facteur avec “SSL, le certificat SSL du serveur SMTP est émis par une Autorité de Certification avec une authentification”
avec cette configuration je configure facteur vers une adresse de la messagerie du serveur qui a différents alias.
si je j’écris a l’auteur spip a qui j’ai attribué une adresse mail égale a cette messagerie .... j’ai une erreur technique ... et pas d’envoi de mail
si je teste la configuration facteur avec un des noms alias de la messagerie, j’obtiens “Aucune adresse email de destination valable pour l’envoi du courriel”
j’ai un site encore en spip 4.0.6 avec facteur4.3.4 sur le même serveur pour lequel ces deux cas fonctionnent
Est-ce un changement volontaire ? est-ce une erreur ?
Je ne suis pas sûr d’avoir compris avec les termes utilisés. (par ex je ne vois pas ce que veut dire “je configure facteur vers une adresse de la messagerie du serveur”)
Est-ce que tu peux réexpliquer en utilisant les termes “adresse d’envoi”, “destinataire” ? Et surtout en donnant des exemples même si fictif (quelle adresse configurée dans facteur, à quelle adresse est envoyé, etc)
je configure l ’adresse d envoi par défaut de facteur adresse.envoi@hotmail.com
Problème 1
Je met cette adresse adresse.envoi@serveur a un auteur spip toto.
j utilise le formulaire contact pour écrire a cet auteur toto .
Erreur.
Si je change l adresse de l’ auteur en ad.autre@hotmail.com et que j utilise le formulaire de contact , le mail part bien
Problème 2
L’adresse d envoi par défaut adresse.envoi@serveur a des alias dont alia.tyty@orange.fr
Si j écris a cet alia.tyty@orange.fr par le formulaire contact ou si je le met pour adresse de test dans ’tester la configuration de facteur ’. L envoi ne marche pas
Il faut aussi expliquer quelle est ta *vraie* configuration d’envoi. Car l’adresse d’envoi c’est juste déclaratif, ce qui envoie c’est la configuration du SMTP (ou fonction mail() de PHP).
Il est plutôt interdit, par exemple, d’affirmer une adresse d’envoi qui ne correspond pas aux droits à envoyer par le SMTP qui envoie (concrètement si l’adresse d’envoi c’est @hotmail, ton SMTP d’envoi devrait être celui de hotmail, pour le cas courant).
La configuration facteur SMTP est égale a l adresse d envoi par defaut adresse.envoi@serveur
L envoi de mail fonctionne si j écris a une adresse différente de l adresse SMTP par exemple ad.autre@hotmail par l intermédiaire du formulaire contact de la dist.
Ce qui ne marche plus c’est si j écris a l adresse SMTP adresse.envoi@serveur ou a un de ses alias alors que cela fonctionnait avant
Bon en fait avec cette version il suffit de ne pas mettre l adresse SMTP a un auteur et de mettre cette adresse SMTP en copie dans la conf facteur pour que le message soit aussi envoye à cette adresse
Je ne comprends toujours pas vraiment, car ça n’existe pas une “adresse SMTP”.
Il y a *l’adresse d’envoi*, qui est une adresse *déclarative*, qui correspond à ce qui sera mis dans l’entête “From” de l’email pour savoir de qui ça vient. Mais cela ne préjuge absolument pas, *du serveur réel* avec lequel sera envoyé l’email. Et qui lui est configuré dans la configuration de l’envoi, càd soit la fonction mail() de PHP, soit un serveur SMTP *précis*. Et donc bien un “serveur SMTP”, pas une “adresse SMTP”. Càd un domaine, un port, un identifiant mdp, etc. C’est ça la configuration de l’envoi dont je demandais quelle était-elle.
Comme dit plus haut, en théorie l’adresse d’envoi déclaré (pour le From) DEVRAIT correspondre le plus souvent à une adresse autorisée du serveur d’envoi configuré (autrement dit si on déclare utiliser une adresse @hotmail pour le From, alors il faut normalement configurer pour utiliser le SMTP de hotmail pour faire les envois, dans le cas courant où on utilise pas un prestataire dédié comme Mailjet etc).
je m’exprime mal mais c’est bien ce que je fait et cela fonctionne.
un mail envoyé par le site a un auteur spip est bien reçu.
L’utilisateur / mot de passe SMTP correspond a un compte ( webmail) qui a des alias qui envois le courrier reçu vers des adresses mail associés ( free, hotmail etc).
je peux aussi envoyer un mail par ma messagerie ( donc sans passer par le site) a cet utilisateur / mot de passe et chaque adresse de l’alias reçois le mail.
ce qui ne fonctionne plus c’est quand je met cet utilisateur / mot de passe comme mail d’un auteur SPIP
.
laisse tomber. je vais simplement ne pas mettre cela a un auteur mais en copie des mails de facteur.
Reply to this message
Bonjour,
Avec les services pro d’OVH, la connexion SMTP doit suivre le protocole STARTTLS.
Or, facteur ne propose pas ce mode :(
Tout ce que facteur affiche lorsqu’on tente un test, c’est :
Est-ce que c’est une erreur de paramétrage de notre côté, ou une limitation de facteur insurmontable ?
starttls c’est tls, mais plus souple, avec un démarrage en clair non chiffré, donc à priori la lib sait forcément le gérer… mais j’avoue que suivant les serveurs et les combinaisons de mode, ports, etc des fois c’est le tatonnage pour trouver.
Reply to this message
Bonjour à tous,
Le plugin fonctionne bien, j’ai associé à un compte gmail pour l’envoi
Seulement je recois toujours ce message d’erreur dans les mails envoyés:
Erreur d’exécution plugins/auto/facteur-2c4f9-v4.1.1/emails/texte.html
Quelqu’un saurait il me dire ce qui ne va pas ? Je suis sous Spip 4.0.0 et facteur 4.1.1
Reply to this message
Bonsoir,
Je n’arrive pas à configurer le plugin Facteur pour une boite mail yahoo.
j’ai testé plein de réglages différent sans succès.
À noté que si je regarde les réglage smtp sous thunderbird la méthode d’authentification est “OAuth2” et là je ne vois pas où entrer cela dans le plugin.
Une idée?
Merci d’avance,
Cordialement,
Hervé
Tu as peut-être ce post précédent qui peut répondre à ta question: https://contrib.spip.net/Facteur#comment499069
Reply to this message
Bonjour,
J’essaie de configurer ce plugin pour des envois de courriels authentifiés, depuis un serveur smtp externe.
J’ai coché et renseigné les options suivantes:
Lorsque je teste la configuration, je reçois bien le courriel.
Cependant, dans l’en-tête du courriel que je reçois, je ne trouve pas d’en-tête DKIM et j’ai “Agent utilisateur” à “PHPMailer 6.1.3 (https://github.com/PHPMailer/PHPMailer)”.
Sans l’en-tête DKIM, les grand·e·s méchant·e·s du mail vont évidemment mettre ça dans les spams dans le meilleur des cas, voir, ne pas délivrer le courriel et ne rien dire. C’est fâcheux. ;-)
Est-ce que j’ai oublié quelque chose?
Je précise qu’en utilisant mon courriel via le webmail ou bien un autre client, j’obtiens bien l’en-tête DKIM.
Bonsoir,
Tu as testé https://www.mail-tester.com/ pour aider à la configuration ?
Il doit manquer dans les dns du domaine l’ip du serveur smtp qui envoi afin de l’authentifier.
J’avais testé avec mail tester.
En gros, l’envoi via facteur (avec l’option smtp) obtient une note de 8.7/10, sans signature DKIM.
Si je reteste depuis le webmail de l’hébergeur, j’obtiens la note 10/10, avec la signature DKIM.
Ça me donne vraiment l’impression que facteur n’utilise pas vraiment l’authentification smtp pour l’envoi de mes courriels depuis le site.
et smtp de l’ hébergeur ou un autre smtp ?
Oui. Pour avoir la bonne signature DKIM dans l’en-tête de mes courriels provenant du site, j’essaie bien sûre d’utiliser le smtp de mon hébergeur.
Reply to this message
Bonjour,
le plugin facteur existe-t-il pour formidable avec spip 4.0 ?
Il manquait un tag sur la dernière version marquée pour SPIP 4 afin que ça génère le paquet ZIP pour le commun des mortels. C’est fait, ça va arriver dans les heures qui suivent.
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: |