PHPackages                             flow/email-checker - 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. [Validation &amp; Sanitization](/categories/validation)
4. /
5. flow/email-checker

ActiveLibrary[Validation &amp; Sanitization](/categories/validation)

flow/email-checker
==================

Check if email addresses exist on a mail server over SMTP using ReactPHP's famous non-blocking event loop

0.3.0(12y ago)2542MITPHP

Since Oct 19Pushed 12y ago3 watchersCompare

[ Source](https://github.com/FlowCommunications/EmailChecker)[ Packagist](https://packagist.org/packages/flow/email-checker)[ RSS](/packages/flow-email-checker/feed)WikiDiscussions master Synced 1w ago

READMEChangelogDependencies (1)Versions (11)Used By (0)

EmailChecker
============

[](#emailchecker)

**EmailChecker** connects to mail servers over SMTP and asks them to verify email addresses. The library uses ReactPHP's event-driven IO layer to handle all the socket communication.

**Key features:**

- *N* connections are opened concurrently and handled asyncronously thanks to ReactPHP.
- Connections are pooled and kept alive so that multiple requests to the same domain are handled efficiently.

**Caveats:**

- SMTP servers respond with any old random response and can't be trusted especially when requesting a mailbox's RCPT (though this approach is better than nothing).
- MX records are resolved using `getmxrr()` and therefore that operation *is* blocking.

**To do:**

- Implement `React/DNS` when is supports MX record resolution.
- Unit test all of the things.

Example:
--------

[](#example)

```
use Flow\EmailChecker\ConnectionPool;
use Flow\EmailChecker\MailboxUser;

$loop = React\EventLoop\Factory::create();

$emails = array(
    'stephen@flowsa.com',
    'i-dont-exist-asdf-1234@gmail.com'
);

$connectionPool = new ConnectionPool($loop, 'flowsa.com', 'stephen', function (ConnectionPool $pool) use (& $emails) {
    $email = array_shift($emails);

    if (!$email) {
        return false; // Returning false will cause the connection pool to drain and eventually die
    }

    $pool->add(
        $email,
        function (MailboxUser $email) { // Bind in a closure for the callback that occurs after an email is resolved
            echo $email->getEmail() . ($email->exists() ? ' exists' : ' does not exist') . "\n";
        }
    );

}, function ($str) {
    echo "$str\n";
});

$connectionPool->setConcurrency(10);
$connectionPool->run();

```

###  Health Score

28

—

LowBetter than 51% of packages

Maintenance20

Infrequent updates — may be unmaintained

Popularity15

Limited adoption so far

Community8

Small or concentrated contributor base

Maturity59

Maturing project, gaining track record

 Bus Factor1

Top contributor holds 100% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Every ~2 days

Total

10

Last Release

4658d ago

### Community

Maintainers

![](https://avatars.githubusercontent.com/u/112059?v=4)[Stephen Frank](/maintainers/stephenfrank)[@stephenfrank](https://github.com/stephenfrank)

---

Top Contributors

[![stephenfrank](https://avatars.githubusercontent.com/u/112059?v=4)](https://github.com/stephenfrank "stephenfrank (16 commits)")

### Embed Badge

![Health badge](/badges/flow-email-checker/health.svg)

```
[![Health](https://phpackages.com/badges/flow-email-checker/health.svg)](https://phpackages.com/packages/flow-email-checker)
```

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
