Vous souhaitez nous soutenir ? Devenez sponsor de l'association sur notre page Github
Découverte de paquets

Se débarrasser des adresses jetables avec Laravel

Laravel Jutsu avatar
Publié le 14 février 2025
Couverture de l'article Se débarrasser des adresses jetables avec Laravel

Introduction

Laravel Disposable Email est un package qui permet de détecter et bloquer les adresses email jetables (aussi appelées temporaires ou "disposable") dans vos applications Laravel. C'est un outil essentiel pour conserver une base saine d'utilisateurs.

L'utilisation de ce package étant relativement simple, je profiterai de cet article pour mettre en avant la manière dont il a été pensé et construit. Cela sera l'occasion de comprendre comment les autres développeurs produisent les librairies que l'on utilise tous les jours avec Laravel !

Fonctionnalités principales

L'utilisation de cette librairie repose sur 2 points essentiels qui sont :

Pour exécuter cette vérification, la librairie s'appuie sur une base de données de domaines jetables dont vous pouvez automatiser la mise à jour.

Il important de noter que la librairie utilise un système de Cache pour optimiser ses performances.

Tutoriel

Installation

Exécutez la commande Composer require pour installer le package. Le Service Provider est découvert automatiquement.

1composer require propaganistas/laravel-disposable-email

Publiez le fichier de configuration et adaptez la configuration selon vos besoins :

1php artisan vendor:publish --tag=laravel-disposable-email

Exécutez la commande artisan suivante pour récupérer une liste à jour des domaines jetables :

1php artisan disposable:update

Ajout de la ligne de langue pour le validateur (optionnel)

Dans votre répertoire de langues, ajoutez pour chaque langue une ligne supplémentaire pour le validateur :

1'indisposable' => 'Les adresses e-mail jetables ne sont pas autorisées.',

Mise à jour régulière de la liste des domaines jetables (optionnel)

Il est fortement recommandé de mettre régulièrement à jour la liste des domaines jetables. Vous pouvez soit exécuter la commande manuellement de temps en temps, soit, si vous utilisez le planificateur de tâches de Laravel, enregistrer la commande disposable:update :

Dans routes/console.php :

1use Illuminate\Support\Facades\Schedule;
2 
3Schedule::command('disposable:update')->weekly();

Ou si vous utilisez Laravel 10 ou une version inférieure, rendez-vous dans le kernel Console :

1protected function schedule(Schedule $schedule)
2{
3 $schedule->command('disposable:update')->weekly();
4}

Utilisation

Utilisez la règle indisposable pour s'assurer qu'un champ donné ne contient pas une adresse e-mail jetable. Il est recommandé de l'ajouter après la règle email pour garantir qu'une adresse valide est transmise :

1'field' => 'email|indisposable',

Récupération personnalisée

Par défaut, le package synchronise la liste des domaines en utilisant file_get_contents(). Si votre application a des besoins différents (par exemple, si elle est derrière un proxy), vous devrez personnaliser la valeur disposable-email.fetcher.

Analyse technique du code 🔧

Structure du package

1src/
2├── Consoles/
3│ └── UpdateDisposableDomainsCommand.php
4├── Contracts/
5│ └── Fetcher.php
6├── Facades/
7│ └── DisposableDomains.php
8├── Fetcher/
9│ └── DefaultFetcher.php
10└── Validation/
11 └── Indisposable.php
12├── DisposableDomains.php
13├── DisposableEmailServiceProvider.php

Analyse des composants 📦

Le Service Provider - DisposableEmailServiceProvider.php

C'est le point d'entrée du package qui gère :

Points clés :

1$this->app->singleton('disposable_email.domains', function ($app) {
2 
3 // Gestion intelligente du cache
4 if ($app['config']['disposable-email.cache.enabled']) {
5 $store = $app['config']['disposable-email.cache.store'];
6 $cache = $app['cache']->store($store == 'default' ?
7 $app['config']['cache.default'] : $store);
8 }
9 
10 $instance = new DisposableDomains($cache ?? null);
11 
12 // Configuration de l'instance...
13 return $instance->bootstrap();
14});

La classe principale - DisposableDomains.php

Le cœur du package qui gère :

Méthode clé de vérification :

1public function isDisposable($email)
2{
3 $domain = Str::lower(Arr::get(explode('@', $email, 2), 1));
4 
5 if (in_array($domain, $this->domains)) {
6 return true;
7 }
8 
9 if ($this->getIncludeSubdomains()) {
10 foreach ($this->domains as $root) {
11 if (str_ends_with($domain, '.'.$root)) {
12 return true;
13 }
14 }
15 }
16 
17 return false;
18}

La commande de mise à jour - UpdateDisposableDomainsCommand.php

Permet de mettre à jour la liste des domaines depuis les sources configurées :

Le Fetcher par défaut - DefaultFetcher.php

Responsable du téléchargement des données :

1public function handle($url): array
2{
3 $content = file_get_contents($url);
4 
5 if (!$this->isValidJson($content)) {
6 throw new UnexpectedValueException('Invalid JSON');
7 }
8 
9 return json_decode($content);
10}

La règle de validation - Indisposable.php

Intègre le package avec le système de validation de Laravel :

1public function validate($attribute, $value, $parameters, $validator)
2{
3 return DisposableDomains::isNotDisposable($value);
4}

La Facade - DisposableDomains.php

Fournit un accès statique pratique aux fonctionnalités "à la Laravel" :

1protected static function getFacadeAccessor()
2{
3 return 'disposable_email.domains';
4}

Architecture et mot de fin 🏗️

On peut conclure que ce package est construit autour d'une architecture élégante et efficace.

Au cœur du système, un Service Provider gère une instance unique (Singleton) pour la validation des emails, optimisant ainsi l'utilisation de la mémoire.

Une Facade offre une interface fluide pour les développeurs, permettant des appels simples comme DisposableDomains::isNotDisposable($email).

L'aspect modulaire de son système de Fetcher permet de placer sa propre logique. Grâce à ce pattern, les développeurs peuvent facilement personnaliser la manière dont les domaines sont récupérés - que ce soit depuis un fichier JSON, une API ou toute autre source.

Le package respecte parfaitement les conventions Laravel : configuration publiable via php artisan vendor:publish, utilisation native du cache et du système de validation, et code organisé selon les standards du framework. Cette intégration soignée "embrasse le framework" en fait un outil vraiment flexible.

Source : https://github.com/Propaganistas/Laravel-Disposable-Email

A lire

Autres articles de la même catégorie