Voici la situation : sur wpcandoit.fr, j’ai mis en place un formulaire Elementor Pro pour collecter les informations des utilisateurs, et créer leur compte ; seulement jusqu’à aujourd’hui, tout à chacun pouvait utiliser wpcandoit.fr en y renseignant un email jetable, un mauvais emails ou un faux nom de domaine.
Protéger un site WordPress des fraudeurs ou des étourdis
Le point de départ du mini-projet est un bout de code que j’utilisais déjà sur mon autre site kingcourriel.fr et qui me permettait de n’autoriser (enfin presque) que les emails professionnels à l’inscription :
add_action('elementor_pro/forms/validation/email', function ($field, $record, $ajax_handler) {
if (preg_match('/^((?!(.*)@yahoo.(.*)|(.*)@orange.fr|(.*)@wanadoo.fr|(.*)@hotmail.(.*)|(.*)@gmail.com|(.*)@zoho.com|(.*)@outlook.(.*)|(.*)@mail.(.*)|(.*)@gmx.(.*)|(.*)@aol.com|(.*)@protonmail.com|(.*)@yandex.com|(.*)@tutanota.com|(.*)@icloud.com|(.*)@me.com|(.*)@laposte.net|(.*)@only.fr|(.*)@live.fr|(.*)@ymail.com|(.*)@sfr.fr|(.*)@voila.fr|(.*)@netcourrier.com|(.*)@zeop.re|(.*)@mediaserv.net|(.*)@srr.fr|(.*)@ool.fr|(.*)@myspace.com|(.*)@izi.re|(.*)@net-c.com|(.*)@free.fr|(.*)@caramail.com|(.*)@neuf.fr|(.*)@msn.com|(.*)@libertysurf.fr|(.*)@mac.com|(.*)@noos.fr).)*$/', $field['value']) !== 1) {
$ajax_handler->add_error($field['id'], 'Veuillez renseigner un email avec votre domaine, eg : prenom.nom@mondomaine.fr');
}
}, 10, 3);
La documentation de référence concernant l’API des formulaires Elementor est ici : https://developers.elementor.com/forms-api/#Form_Field_Validation_Action
Phase #1 : MailCheck.ai à la rescousse contre les emails jetables
Le site MailCheck.ai propose une API gratuite pour aider à lutter contre les emails temporaires sur votre site WordPress, d’ailleurs une extension est disponible et elle se comporte très bien si la fonction ‘is_email‘ est enclenchée par WordPress ou par un plugin.
Malheureusement ça n’est pas le cas des formulaires Elementor Pro comportant le champ Email.
La documentation de référence concernant l’API de MailCheck.ai est ici :
https://docs.mailcheck.ai/reference/api-reference/email-endpoint
Phase #2 : Bulk Email Checker contre les mauvais emails ou faux noms de domaine
Bulk Email Checker est un service payant cette fois-ci, mais vraiment donné en rapport qualité/prix, et qui met à disposition de ses clients une API plutôt simple à mettre en œuvre.

Avec même du code fournit en exemple :
// set the api key and email to be validated
$key = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx';
$email = urlencode($field['value']);
// use curl to make the request
$url = 'https://api-v4.bulkemailchecker.com/?key=' . $key . '&email=' . $email;
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 0);
curl_setopt($ch, CURLOPT_TIMEOUT, 5);
$response = curl_exec($ch);
curl_close($ch);
// decode the json response
$json = json_decode($response, true);
// if address is failed, alert the user they entered an invalid email
if ($json['status'] == 'failed') {
// send alert
}
Phase #3 Combiner les 2 phases codes grâce à des conditions
Voici un diagramme du rendu final :

Voilà un mini projet comme je les aime bien et qui m’a permis encore une fois d’aller un peu plus loin dans la maîtrise de PHP et des APIs.



Le résumé en vidéo :
Quelques références utiles :
- https://www.php.net/manual/fr/language.operators.comparison.php
- https://www.php.net/manual/fr/language.operators.logical.php
- https://www.php.net/manual/fr/function.empty.php
- https://www.php.net/manual/en/function.is-array.php
- https://www.php.net/manual/fr/control-structures.else.php



