egulias/email-validator
RFC-focused email validation library for PHP. Validates addresses against RFC 5321/5322/6530-6532 and 1035 with pluggable strategies (RFC, DNS, spoof checks). Designed for strict parsing and modern PHP (8.1+) projects via Composer.
Start by installing the package with Composer:
composer require egulias/email-validator
Then, use the basic EmailValidator class with a validation strategy. The simplest approach is RFC-compliant validation:
use Egulias\EmailValidator\EmailValidator;
use Egulias\EmailValidator\Validation\RFCValidation;
$validator = new EmailValidator();
isValid('user@example.com', new RFCValidation()); // true
This covers standard email structure per RFC 5321/5322. For production-grade validation, combine validations (e.g., RFCValidation + DNSCheckValidation) via MultipleValidationWithAnd.
MultipleValidationWithAnd to enforce both structural validity (RFC) and domainReachability (DNS).
$validator->isValid('user@domain.com', new MultipleValidationWithAnd([
new RFCValidation(),
new DNSCheckValidation() // Requires PHP Intl
]));
Rule::required()-> Rule::email()->validateUsing(fn($attribute, $value) => (new EmailValidator())->isValid($value, new RFCValidation()))
Or build a reusable Validator class.EmailValidation interface for custom rules (e.g., blocklist, disposable-domain filtering, or custom business logic). Example:
class BlocklistValidation implements EmailValidation {
public function isValid($email, $extraData = null): bool {
return !in_array($this->extractDomain($email), $this->blocklist);
}
}
NoRFCWarningsValidation fails on RFC deviations (e.g., comments, obsolete syntax), useful for strict compliance requirements.DNSCheckValidation and SpoofCheckValidation won’t work.SpoofCheckValidation catches visually similar unicode (e.g., Cyrillic а vs Latin a), but it’s only reliable with Intl enabled.user@localhost). Library flags them as warnings (not errors) unless NoRFCWarningsValidation is used.EmailValidator::getWarnings() after validation to debug subtle issues (e.g., deprecated comments, domain formatting quirks).DNSCheckValidation is expensive. Consider caching results or deferring to post-signup email verification (e.g., confirmation link).EmailValidation interface is minimal—implementations receive $extraData (useful for injecting config), but many built-in validators ignore it. Extend carefully.How can I help you explore Laravel packages today?