Ludovicclain. Com bloquer les emails jetables, les mauvais emails ou les faux domaines dans un formulaire elementor

Bloquer les emails jetables, les mauvais emails ou les faux domaines dans un formulaire Elementor

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.

Bulkemailchecker restful api v4 real time email validation

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 :

Email check diagram 2

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 :

2022 02 19 21 34 40
Cliquez sur l’image pour accéder au live 👆 

Quelques références utiles :

Cet article vous a été utile ?
Oui 👍 Non 👎
Retour en haut