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
| Classe | Propriedades |
|---|---|
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étodo | Retorna | Explicação |
|---|---|---|
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 |
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ção | HTTP | Quando |
|---|---|---|
AuthenticationException | 401/403 | Chave de API inválida ou ausente |
RateLimitException | 429 | Limite de 60 req/min ou teto por hora. $e->retryAfterSeconds |
NoCreditsException | 429 | Cré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
| Pasta | Descrição |
|---|---|
src/Client.php | Cliente 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) |
v5.0.0 · Licença MIT · PHP 8.1+ · Guzzle 7 · PSR-6 / PSR-3