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
Problème dû à Facteur ? Je n’en sais rien donc je demande...
Je suis en SPIP 3.0.19, Sarka-SPIP 3.2.36
Les messages partent, les accusés de réception aussi, et tout ce beau monde arrive bien. Il reste que le contenu des messages est illisible à l’arrivée dans l’interface privée uniquement. Voir copie d’écran jointe.
Merci d’avance ! :-/
Répondre à ce message
Bonjour,
Depuis la mise en jour 3.1.0, le plugin n’enregistre plus les informations d’authentification du serveur SMTP (le nom est bien conservé, mais pas le mot de passe ni le champ sécurité sans-SSL-TSL).
Les tentatives de vider les caches ou de nettoyer la base sqlite (la base spip_meta:facteur_xxxx) n’ont rien donné.
Un retour sur une version antérieure est la seule solution qui fonctionne.
Merci par avance.
Ah bien vu !
Devrait être corrigé par http://zone.spip.org/trac/spip-zone/changeset/89666
Merci.
Répondre à ce message
Bonjour,
En lien avec un problème posté à http://contrib.spip.net/Mailsubscribers#forum476276
Facteur (3.0.13) ne peut m’envoyer des courriels. Pourtant le smtp (ovh) est configuré comme mon client de courriel.
Mailershot 1.6.5 est par ailleurs installé
Certaines personnes ont-elle eu le cas chez OVH ?
Cordialement,
Pierre-Yves
Bonjour
Pour le smtp chez ovh, il faut mettre dans :
Hote = ssl0.ovh.net
port = 445
Requiert une authentification = oui (puis rentrer ses identifiants)
Connexion sécurisée = SSL
Maintenant bon courage, je pars en vacance :-D
Bonjour Franck,
Et merci pour la réponse,
Il s’agit bien de cela. Mais avec le port 465 d’après http://guide.ovh.com/ConfigurationEmail
Celà ne marche pas encore pleinement. Ca passe par moment, à d’autre non... Un problème de communication entre serveurs de courriels ?
Je poursuis mes investigations.
Bonnes vacances du coup !
Pierre-Yves
Bonjour,
Même probleme constaté sur un spip 3.017 chez OVh avec SMTP Configuré correctement.
(avec aussi Mailshot ...)
Parfois les mails de test du facteur partent, parfois ils sont bloqués avec erreur ...
Idem , parfois les mails de Test Infolettre partent, parfois ils ne partent pas ...
Bizarre...
Une piste de solution ?
Je constate le même problème
Répondre à ce message
Salut,
pour info, la Version 2.4.5 renvoie vers une erreur 404.
Merci pour le beau boulot en tout cas !
Répondre à ce message
Pour info la dernière mise à jour (3.0.20) à fait sauter la configuration.
Bon je l’ai remise mais du coup ma newsletter est partie avec un peu de retard...
Il me semble qu’il n’y ait aucune mise à jour récente qui ait touché à la configuration pourtant :
http://zone.spip.org/trac/spip-zone/log/_plugins_/facteur/trunk
Répondre à ce message
Attention, la maj v3.0.20 du plugin Facteur n’est pas renseignée pour la lame mise-à-jour automatique du plugin « Le Couteau Suisse »... Ce qui provoque une erreur avec le plugin Formidable pour l’envoi des formulaires...
Fatal error : Call to undefined function facteur_mail_html2text() in /var/www/vhosts/monsite.truc/httpdocs/plugins/auto/formidable/traiter/email.php on line 114
Je remonte l’info auprès du couteau suisse et de formidable.
Merci
Répondre à ce message
Bonjour,
J’utilise facteur via un plugin fait maison qui envoie une liste de mail via le cron de spip à une cadence donnée (un peu comme mailshot, mais pour des raisons particulière j’ai réécrit un plugin).
Le plugin facteur est configuré en envoi smtp. Je l’appelle via la fonction envoyer_mail.
Tout se passe à merveille, je reçoit bien mes 2500 mails en 24h comme prévu. Simplement dans les logs, j’ai 2500 erreurs du type :
Et là je ne comprends pas...
C’est dû à ce commit :
http://zone.spip.org/trac/spip-zone/changeset/83006
qui a rajouté un _LOG_ERREUR à un log classique d’envoi (celui vers la fin), et du coup ça loguait même quand ça marchait.
Corrigé par :
http://zone.spip.org/trac/spip-zone/changeset/86146
Merci beaucoup !
this error is still ther in version pour spip 2.1 !
Répondre à ce message
Bonjour,
Depuis un moment je ne reçoit que des messages « Echoue d’envoi »
« SMTP error from remote mail server after end of data : »
Quelqu’un peut donner de l’aide svp. Merci.
NB : j’utilise spip 3.0
Plugins : Facteur, MailSubscribers, MailShot et Newsletters.
Répondre à ce message
Bonjour,
dans la version 3.0.18 de ce plugin il est fait référence à une balise #LOGO_NOTIFICATION dans le fichier emails/inc-haut.html.
Comment peut-on renseigner ce logo de notification ?
merciii
P
Répondre à ce message
Bonjour,
Merci pour ce plugin, que j’utilise avec bonheur depuis plusieurs années.
Suite à un changement de la config du serveur sur lequel je me trouve, j’ai dû modifier l’usage du plugin « facteur » : le serveur SMTP n’est plus accessible en « localhost » comme auparavant, mais je dois me connecter sur autre serveur, avec authentification, pour pouvoir envoyer du mail.
Problème, alors que je suis absolument sûr de la config (le webmail Roundcube, sur la même machine et le même serveur SMTP, fonctionne sans problème), « facteur » me répond invariablement « Ce nom d’hôte n’est pas correct » et refuse d’enregistrer la nouvelle config.
Avez-vous déjà rencontré ce problème ? Auriez-vous éventuellement quelques pistes à me donner pour résoudre ce problème ?
Précisions utiles : j’utilise la version 1.8.9 de « facteur » sur un SPIP 2.1.26, sur une machine Debian Wheezy dont tous les paquets sont à jour.
Je reviens à ce problème.
Nous avons identifié un bug : la regex a la ligne 50 du fichier
formulaire/configurer_facteur.php
, qui contrôle la validité du nom d’hôte, ne permet pas d’utiliser des noms avec plus de trois parties. Mais elle permet par contre d’utiliser des caractères de ponctuation, ce qui n’a pas de sens.En la remplaçant par
';^[[:alnum:]]+((.?|-*)[[:alnum:]]+)*$;'
, il devient possible d’enregistrer la configuration d’un serveur SMTP dont le nom d’hôtes compte plus de trois parties.Mais l’envoi ne fonctionne toujours pas... on continue à chercher.
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 : |