Biblioteca PHP — Pacote Composer

composer require nsoftware/email-validator-php

Cliente de API com tipagem segura para email-validaton.com. Assíncrono, com cache e pronto para Laravel.

Instalação

composer require nsoftware/email-validator-php

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

Início 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!";
}

Verificação Assí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";
        }
    });

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

DTOs com Tipagem Segura

ClassePropriedades
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 possui um fromApiResponse(array) factory and toArray() serialization.

Predicados práticos

MétodoRetornaExplicação
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

Integração com Laravel

O pacote se registra automaticamente via auto-discovery do Laravel. Basta adicionar sua chave de API em .env:

EMAIL_VALIDATOR_API_KEY=ev_your_key

Agora use injeção de dependências ou a facade em qualquer 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();

Tratamento de Erros

ExceçãoHTTPQuando
AuthenticationException401/403Chave de API inválida ou ausente
RateLimitException429Limite de 60 req/min ou teto por hora. $e->retryAfterSeconds
NoCreditsException429Créditos esgotados
ApiException--Erro de rede, resposta 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()}");
}

Conteúdo do Pacote

PastaDescrição
src/Client.phpCliente principal da API com métodos síncronos e assíncronos
src/Data/DTOs imutáveis (VerificationResult, AccountInfo, CreditInfo)
src/Exceptions/Exceções tipadas com códigos HTTP
src/Laravel/Provedor de serviços, fachada, configuração publicável
tests/Testes PHPUnit
config/Configuração do Laravel (publique com artisan)
Baixe email-validator-php.zip Voltar aos Add-ons

v5.0.0 · Licença MIT · PHP 8.1+ · Guzzle 7 · PSR-6 / PSR-3