Bonjour,
Je précise que ce petit tuto fonctionne avec TW14, PHP8.5 et un accès SMTP. Je ne peux pas garantir que ça va fonctionner chez vous, mais vous pouvez toujours essayer.
Pour mettre un captcha à une inscription à votre mailing list, il vous faudra d'abord créer une rubrique invisible dans laquelle vous mettrez un seul paragraphe qui contient une mailing list sans validation obligatoire de la politique de confidentialité de votre site.
Ensuite vous créez, à l'endroit où vous voulez votre ML, un formulaire avec un seul champ obligatoire pour l'email. Ceci, car il est possible de mettre un captcha sur les formulaires. Puis vous choisissez de mettre à votre formulaire un captcha et préférablement mais pas obligatoirement aussi une checkbox pour obliger l'utilisateur à accepter votre politique de confidentialité. Chez moi ça fonctionne avec cette option, mais je n'ai pas essayé sans. Je vous conseille d'obliger les utilisateurs à accepter votre Politique de confidentialité.
Dans action du formulaire, vous choisissez d'envoyer le formulaire à l'aide d'un script personalisé, et donc de ne pas utiliser les i-services. Si vous n'arrivez pas à sélectionner cette option, il vous faut aller dans Options -> i-services -> Formulaires -> Configurer et décocher Toujours utiliser les i-services pour l'envoi des formulaires, et sélectionner Me laisser choisir pour chaque formulaire.
Voici le script PHP que vous devrez mettre dans le dossier de votre choix que vous aurez créé. Attention! À ce niveau-là, il faut savoir que ce script ne fonctionnera pas dans un dossier de la hiérarchie de TW (par esemple le dossier _fields). Vous devez en créer un, ou alors mettre le scipt à la racine du site. Je précise que les mails sont, dans mon site, envoyés par SMTP, mais ça devrait fonctionner aussi si vous utilisez la fonction mail() de PHP. Choisir ce script pour l'envoi du formulaire.
<?php
//Script à mettre dans le dossier dossierexemple à créer.
$email = $_POST['email'] ?? 'anon@undefined.com';
/*Vous pouvez mettre une vraie adresse ici à la place de anon@undefined.com, mais dans ce cas, chaque fois que quelqu'un lancera votre script sans paramètres cela vous enverra un mail à cette adresse. C'est risqué. En cas de mail bombing vous pouvez vous faire blacklister de votre compte SMTP. Je vous conseille de laisser tel quel*/
if ($email == 'anon@undefined.com' ) {//Bloc if() à commenter ou effacer si vous utilisez une vraie adresse mail
//sur la ligne qui précède.
header("Location: https://votresite.com");
exit;
}
// Vérification de l'email
if (empty($email)) { // || !filter_var($email, FILTER_VALIDATE_EMAIL)) {
echo $email;
die("Erreur : Adresse email invalide.");
}
// Données envoyées au script iServ
$postData = [
'mlemail' => $email,
'mlconfaction' => 'sub', // Action d'abonnement
'ml_confirmed' => 'on' // Confirmation d'acceptation des CGU
];
$targetUrl = "https://votresite.com/_iserv/mailinglist/mailinglist.php";
// Initialisation de cURL
$ch = curl_init($targetUrl);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $postData);
curl_setopt($ch, CURLOPT_REFERER, "https://votresite.com/index.php");//Mettre ici l'adresse de la page de votre
// site qui appelle le script (celle ou se trouve la ML).
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); // <--- IMPORTANT
// Exécution de la requête
$response = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
// Traitement du résultat
if ($httpCode == 200) {
//echo "Merci ! Votre inscription a bien été transmise.";
header("Location: https://votresite.com/retourOK.php?courriel=$email");
exit;
} else {
echo "Une erreur est survenue lors de l'inscription (Code : $httpCode).";
exit;
}
?>
Dans TW, ajouter un champ script PHP (par exemple %EMAIL%) pour récupérer et affiche l'adresse mail dans la page retourOK.php que vous aurez créée pour signaler un envoi correct d'un message de demande de confirmation d'inscription à votre ML. Ce champ peut être de la forme:
<?php
$email = $_GET['courriel'] ?? 'undefined';
echo $email;
// Pour sécuriser l'affichage utilisez la ligne au-dessous, mais ça ne devrait normalement être inutile.
echo htmlspecialchars($email);
?>
Vous devez l'insérer à l'endroit où vous souhaitez voir apparaître l'adresse mail de la personne qui a fait la demande d'inscription. Vous pouvez, par exemple entrer le texte: "Merci de vous être inscrit à la mailinglist. Un email de demande de confirmation vous à été envoyé à %EMMAIL%.
Voilà! Normalement vous devriez être en mesure d'ajouter un captcha à votre formulaire de mailinglist. J'espère n'avoir rien oublié. Si oui, j'essayerai de répondre aux questions.