Libreria PHP — Pacchetto Composer

composer require nsoftware/email-validator-php

Client API type-safe per email-validaton.com. Asincrono, con cache, pronto per Laravel.

Installazione

composer require nsoftware/email-validator-php

Requisiti: PHP 8.1+, Guzzle 7, cache PSR-6 (opzionale), logger PSR-3 (opzionale).

Avvio rapido

<?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!";
}

Verifica asincrona

$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";
        }
    });

Caching 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 type-safe

ClasseProprietà
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

Ogni DTO ha un fromApiResponse(array) factory and toArray() serialization.

Predicati pratici

MetodoRestituisceSpiegazione
isValid()boolstatus === 'valid'
isInvalid()boolstatus === 'invalid'
isRisky()boolstatus === 'risky'
isCatchAll()boolstatus === 'catch_all'
isDisposable()boolstatus === 'disposable'
isDeliverable()boolvalid || risky || catch_all
costCredit()boolvalid || invalid || over_quota || disposable

Integrazione con Laravel

Il pacchetto si registra automaticamente tramite la auto-discovery di Laravel. Basta aggiungere la tua chiave API a .env:

EMAIL_VALIDATOR_API_KEY=ev_your_key

Ora usa la dependency injection o la facade ovunque:

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();

Gestione degli errori

EccezioneHTTPQuando
AuthenticationException401/403Chiave API errata o mancante
RateLimitException42960 richieste/min o limite orario. $e->retryAfterSeconds
NoCreditsException429Crediti esauriti
ApiException--Errore di rete, risposta imprevista
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()}");
}

Contenuto del pacchetto

CartellaDescrizione
src/Client.phpClient API principale con metodi sincroni e asincroni
src/Data/DTO immutabili (VerificationResult, AccountInfo, CreditInfo)
src/Exceptions/Eccezioni tipizzate con codici HTTP
src/Laravel/Service provider, facade, configurazione pubblicabile
tests/Test PHPUnit
config/Configurazione Laravel (pubblicabile con artisan)
Scarica email-validator-php.zip Torna ai componenti aggiuntivi

v5.0.0 · Licenza MIT · PHP 8.1+ · Guzzle 7 · PSR-6 / PSR-3