PHPackages                             lemonade/email-validator - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. lemonade/email-validator

ActiveLibrary

lemonade/email-validator
========================

A PHP library for validating email addresses, including spam database checks, DNS record validation, and disposable email detection.

00PHP

Since Nov 25Pushed 1y ago1 watchersCompare

[ Source](https://github.com/johnnyxlemonade/component_email_validator)[ Packagist](https://packagist.org/packages/lemonade/email-validator)[ RSS](/packages/lemonade-email-validator/feed)WikiDiscussions master Synced 1mo ago

READMEChangelogDependenciesVersions (1)Used By (0)

Lemonade Email Validator
========================

[](#lemonade-email-validator)

A PHP library for validating email addresses with features like spam database checks, DNS record validation, and disposable email detection.

---

Features
--------

[](#features)

- **Email Format Validation**: Checks if the email format is valid.
- **Spam Database Validation**: Verifies if the email exists in known spam databases.
- **DNS Record Validation**: Ensures the domain has valid MX records.
- **Disposable Email Detection**: Detects temporary/disposable email addresses.

---

Installation
------------

[](#installation)

Use [Composer](https://getcomposer.org/) to install the library:

```
composer require lemonade/email-validator
```

### Requirements

[](#requirements)

- PHP 8.1 or later
- Dependencies:
    - `guzzlehttp/guzzle` ^7.0
    - `guzzlehttp/promises` ^1.0
    - `psr/cache` ^1.0 || ^2.0 || ^3.0
    - `psr/log` ^1.0 || ^2.0 || ^3.0
    - `symfony/cache` ^5.0 || ^6.0
    - `monolog/monolog` ^2.0 || ^3.0

---

Usage
-----

[](#usage)

### 1. Create an EmailValidationManager

[](#1-create-an-emailvalidationmanager)

```
use Lemonade\EmailValidator\EmailValidationManager;
use Lemonade\EmailValidator\Validators\FormatValidator;
use Lemonade\EmailValidator\Validators\MxRecordValidator;
use Lemonade\EmailValidator\Validators\SpamDatabaseValidator;
use Lemonade\EmailValidator\Validators\DisposableEmailValidator;
use Lemonade\EmailValidator\Logger\LoggerFactory;

// Initialize logger
$logger = LoggerFactory::createLogger('/path/to/logfile.log');

// Create EmailValidationManager
$emailValidationManager = new EmailValidationManager($logger);

// Add validators
$emailValidationManager->addValidator(new FormatValidator($logger));
$emailValidationManager->addValidator(new MxRecordValidator($logger));
$emailValidationManager->addValidator(new DisposableEmailValidator(['mailinator.com', 'temp-mail.org'], $logger));
$emailValidationManager->addValidator(new SpamDatabaseValidator($config, $client, $cache, $logger));

// Validate an email
$email = "example@mailinator.com";
$isValid = $emailValidationManager->validate($email);

if ($isValid) {
    echo "Email is valid!";
} else {
    echo "Invalid email. Errors: ";
    print_r($emailValidationManager->getErrors());
}
```

---

Classes and Components
----------------------

[](#classes-and-components)

### 1. `EmailValidationManager`

[](#1-emailvalidationmanager)

Main class to manage email validation. Add validators and validate an email.

- **Methods**:
    - `addValidator(ValidatorInterface $validator)`: Adds a validator.
    - `validate(string $email): bool`: Validates an email.
    - `getErrors(): array`: Returns validation errors.
    - `getErrorMessage(): string`: Returns error messages.

---

### 2. Validators

[](#2-validators)

#### a. `FormatValidator`

[](#a-formatvalidator)

Checks the email format using PHP's `filter_var`.

#### b. `MxRecordValidator`

[](#b-mxrecordvalidator)

Validates if the domain has valid MX records using `checkdnsrr`.

#### c. `DisposableEmailValidator`

[](#c-disposableemailvalidator)

Detects temporary email addresses using a list of disposable domains.

- **Constructor Parameters**:
    - `array $domains`: List of disposable domains.
    - `LoggerInterface|null $logger`: Optional logger.

#### d. `SpamDatabaseValidator`

[](#d-spamdatabasevalidator)

Checks email against external spam databases via API.

- **Constructor Parameters**:
    - `ConfigHandler $config`: API configurations.
    - `Client $client`: HTTP client.
    - `CacheItemPoolInterface $cache`: Cache for results.
    - `LoggerInterface|null $logger`: Optional logger.

---

### 3. Utilities

[](#3-utilities)

#### a. `DomainValidator`

[](#a-domainvalidator)

Validates domain names using a regex-based approach.

#### b. `ConfigHandler` and `ConfigHandlerItem`

[](#b-confighandler-and-confighandleritem)

Manage API configurations for `SpamDatabaseValidator`.

#### c. `LoggerFactory`

[](#c-loggerfactory)

Creates a Monolog logger.

---

Testing
-------

[](#testing)

Run the tests using PHPUnit:

```
composer test
```

---

License
-------

[](#license)

This library is licensed under the MIT License.

---

Design Patterns Used in the Project
-----------------------------------

[](#design-patterns-used-in-the-project)

1. **Factory Pattern**

- Used in `LoggerFactory` to create instances of `Logger`.
- Simplifies the initialization process and provides a single point of creation for loggers.

2. **Strategy Pattern**

- Validators such as `FormatValidator`, `MxRecordValidator`, `DisposableEmailValidator`, and `SpamDatabaseValidator` implement the `ValidatorInterface`.
- This allows flexible addition or removal of validation strategies.

3. **Dependency Injection**

- Used in constructors (e.g., `SpamDatabaseValidator`) to inject dependencies such as `LoggerInterface`, `ConfigHandler`, `Client`, and `CacheItemPoolInterface`.
- Enhances testability and decouples components.

4. **Decorator Pattern**

- Optional logging in validators enhances their functionality without altering their core logic.
- For example, logging errors or warnings during email validation.

5. **Singleton Pattern**

- The `EmailValidationManager` acts as a central point for managing validators and coordinating the validation process, though not implemented as a strict singleton.

---

---

Demo
----

[](#demo)

Below is a complete example of how to use the Lemonade Email Validator library:

```
