Biblioteca PHP — Paquete de Composer

composer require nsoftware/email-validator-php

Cliente de API con tipos seguros para email-validaton.com. Asíncrono, con caché y listo para Laravel.

Instalación

composer require nsoftware/email-validator-php

Requisitos: PHP 8.1+, Guzzle 7, caché PSR-6 (opcional), logger PSR-3 (opcional).

Inicio rápido

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

Verificación asíncrona

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

Caché 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);

DTOs con tipos seguros

ClasePropiedades
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

Cada DTO tiene un método estático fromApiResponse(array) factory and toArray() serialization.

Predicados prácticos

MétodoDevuelveExplicación
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

Integración con Laravel

El paquete se registra solo mediante el auto-descubrimiento de Laravel. Basta con añadir tu clave de API a .env:

EMAIL_VALIDATOR_API_KEY=ev_your_key

Ahora usa la inyección de dependencias o la fachada en cualquier lugar:

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

Gestión de errores

ExcepciónHTTPCuándo
AuthenticationException401/403Clave de API incorrecta o ausente
RateLimitException42960 peticiones/min o límite por hora. $e->retryAfterSeconds
NoCreditsException429Créditos agotados
ApiException--Error de red, respuesta inesperada
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()}");
}

Contenido del paquete

CarpetaDescripción
src/Client.phpCliente principal de API con métodos síncronos y asíncronos
src/Data/DTO inmutables (VerificationResult, AccountInfo, CreditInfo)
src/Exceptions/Excepciones tipadas con códigos HTTP
src/Laravel/Proveedor de servicios, fachada, configuración publicable
tests/Pruebas con PHPUnit
config/Configuración de Laravel (publicar con artisan)
Descarga email-validator-php.zip Volver a Complementos

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