Bibliothèque PHP — Package Composer
composer require nsoftware/email-validator-php
Client API typé pour email-validaton.com. Asynchrone, avec cache, prêt pour Laravel.
Installation
composer require nsoftware/email-validator-php
Prérequis : PHP 8.1+, Guzzle 7, cache PSR-6 (facultatif), logger PSR-3 (facultatif).
Démarrage rapide
<?php
require 'vendor/autoload.php';
use NSoftware\EmailValidator\Client;
$client = new Client('ev_your_api_key');
// Verify one email
$result = $client->verify('user@example.com');
if ($result->isValid()) {
echo "Valid — confidence: {$result->confidence}";
}
if ($result->isDisposable()) {
echo "Disposable email — reject!";
}
Vérification asynchrone
$client->verifyAsync('user@domain.com')
->then(fn($result) => echo $result->status);
// Bulk async with controlled concurrency
$client->verifyBulkAsync($emails, concurrency: 10)
->then(function(array $results) {
foreach ($results as $email => $r) {
echo "$email: {$r->status}\n";
}
});
Cache PSR-6
use Symfony\Component\Cache\Adapter\FilesystemAdapter;
$cache = new FilesystemAdapter('email-validator', 300);
$client = new Client('ev_...', cache: $cache);
// Account info auto-cached for 5 min
$account = $client->getAccount();
// Force refresh
$account = $client->getAccount(forceRefresh: true);
DTO typés
| Classe | Propriétés |
|---|---|
VerificationResult |
email, status, reason, confidence, mxServer, mxList, smtpResponse, sourceIp, durationMs, remainingCredits, isYahoo |
AccountInfo |
email, plan, planName, creditsRemaining, creditsUsed, creditsLimit, planType, subscriptionActive, subscriptionCancelled, subscriptionExpires, freeRemaining, totalRemaining, isAdmin |
CreditInfo |
hasCredits, creditsRemaining |
Chaque DTO dispose d'une méthode statique fromApiResponse(array) factory and toArray() serialization.
Prédicats pratiques
| Méthode | Retourne | Explication |
|---|---|---|
isValid() | bool | status === 'valid' |
isInvalid() | bool | status === 'invalid' |
isRisky() | bool | status === 'risky' |
isCatchAll() | bool | status === 'catch_all' |
isDisposable() | bool | status === 'disposable' |
isDeliverable() | bool | valid || risky || catch_all |
costCredit() | bool | valid || invalid || over_quota || disposable |
Intégration Laravel
Le package s'enregistre automatiquement via la découverte automatique de Laravel. Ajoutez simplement votre clé API dans .env:
EMAIL_VALIDATOR_API_KEY=ev_your_key
Utilisez ensuite l'injection de dépendances ou la façade n'importe où :
use NSoftware\EmailValidator\Client;
use EmailValidator; // Facade alias
class SignupController
{
public function store(Request $request, Client $validator)
{
$result = $validator->verify($request->email);
if (!$result->isDeliverable()) {
return back()->withErrors(['email' => 'Invalid email']);
}
// Create user...
}
}
// Or with the facade:
$result = EmailValidator::verify('user@example.com');
$account = EmailValidator::getAccount();
Gestion des erreurs
| Exception | HTTP | Cas |
|---|---|---|
AuthenticationException | 401/403 | Clé API incorrecte ou manquante |
RateLimitException | 429 | 60 req/min ou plafond horaire. $e->retryAfterSeconds |
NoCreditsException | 429 | Crédits épuisés |
ApiException | -- | Erreur réseau, réponse inattendue |
try {
$result = $client->verify('user@example.com');
} catch (RateLimitException $e) {
sleep($e->retryAfterSeconds);
// retry
} catch (NoCreditsException $e) {
// prompt user to upgrade
} catch (ApiException $e) {
logger()->error("Validation failed: {$e->getMessage()}");
}
Contenu du package
| Dossier | Description |
|---|---|
src/Client.php | Client API principal avec méthodes synchrones et asynchrones |
src/Data/ | DTO immuables (VerificationResult, AccountInfo, CreditInfo) |
src/Exceptions/ | Exceptions typées avec codes HTTP |
src/Laravel/ | Fournisseur de services, façade, configuration publiable |
tests/ | Tests PHPUnit |
config/ | Configuration Laravel (publier avec artisan) |
v5.0.0 · Licence MIT · PHP 8.1+ · Guzzle 7 · PSR-6 / PSR-3