fgribreau/mailchecker

Temporary (disposable/throwaway) email detection library. Covers 1987 fake email providers.

Package info

github.com/FGRibreau/mailchecker

pkg:composer/fgribreau/mailchecker

Fund package maintenance!

fgribreau

Statistics

Installs: 697 350

Dependents: 3

Suggesters: 0

Stars: 1 891

Open Issues: 6

v6.0.20 2026-03-06 16:31 UTC

Requires

  • php: >=8.1

Requires (Dev)

Suggests

None

Provides

None

Conflicts

None

Replaces

None

MIT 306ab3da6adf11e644f046070b55011eba74ef69

emailfakedetectiondisposable

This package is auto-updated.

Last update: 2026-06-16 09:57:09 UTC


README

πŸ‘ PyPi version
πŸ‘ PyPI - Downloads

πŸ‘ Cargo version
πŸ‘ Crates.io

πŸ‘ NPM version
πŸ‘ npm

πŸ‘ Gem version
πŸ‘ Gem

πŸ‘ Packagist version
πŸ‘ Packagist

πŸ‘ GoDoc

πŸ‘ Get help on Codementor
πŸ‘ available-for-advisory
πŸ‘ extra
πŸ‘ Slack

Cross-language email validation. Backed by a database of over 55 000 throwable email domains.

This will be very helpful when you have to contact your users and you want to avoid errors causing lack of communication or want to block "spamboxes".

Sponsors

πŸ‘ France-Nuage

France-Nuage
Sovereign French cloud for your signup pipeline. No vendor lock-in.
πŸ‘ Hook0

Hook0
Send signup events as signed webhooks. Self-hosted, retry built-in.
πŸ‘ Natalia

Natalia
Catch the leads that signed up with bad emails β€” Natalia calls them back.
πŸ‘ Netir

Netir
Hire vetted French freelance backend devs through mentored marketplace.
πŸ‘ NoBullshitConseil

NoBullshitConseil
No-bullshit tech advisory. Founders & CTOs get straight answers.
πŸ‘ Qualneo

Qualneo
Qualiopi LMS for French trainers. 32 indicators wired in, audit-ready.
πŸ‘ Recapro

Recapro
Private AI that transcribes meetings & drafts reports. Sovereign hosting.

Interested in sponsoring? Get in touch

Upgrade

From 3.x to 4.x

  • PHP
# import using the fully qualified name.
use Fgribreau\MailChecker;

// ...
echo MailChecker::isValid('myemail@yopmail.com');

From 1.x to 3.x

Mailchecker public API has been normalized, here are the changes:

  • NodeJS/JavaScript: MailChecker(email) -> MailChecker.isValid(email)
  • PHP: MailChecker($email) -> MailChecker::isValid($email)
  • Python
import MailChecker
m = MailChecker.MailChecker()
if not m.is_valid('bla@example.com'):
 # ...

became:

import MailChecker
if not MailChecker.is_valid('bla@example.com'):
 # ...

MailChecker currently supports:

Usage

NodeJS

var MailChecker = require('mailchecker');

if(!MailChecker.isValid('myemail@yopmail.com')){
 console.error('O RLY !');
 process.exit(1);
}

if(!MailChecker.isValid('myemail.com')){
 console.error('O RLY !');
 process.exit(1);
}

JavaScript

<script type="text/javascript" src="MailChecker/platform/javascript/MailChecker.js"></script>
<script type="text/javascript">
if(!MailChecker.isValid('myemail@yopmail.com')){
 console.error('O RLY !');
}

if(!MailChecker.isValid('myemail.com')){
 console.error('O RLY !');
}
</script>

PHP

use Fgribreau\MailChecker;

require __DIR__ . '/vendor/autoload.php';

if(!MailChecker::isValid('myemail@yopmail.com')){
 die('O RLY !');
}

if(!MailChecker::isValid('myemail.com')){
 die('O RLY !');
}

Python

pip install mailchecker
# no package yet; just drop in MailChecker.py where you want to use it.
from MailChecker import MailChecker

if not MailChecker.is_valid('bla@example.com'):
 print("O RLY !")

Django validator: https://github.com/jonashaag/django-indisposable

Ruby

require 'mail_checker'

unless MailChecker.valid?('myemail@yopmail.com')
 fail('O RLY!')
end

Rust

 extern crate mailchecker;

assert_eq!(true, mailchecker::is_valid("plop@plop.com"));
assert_eq!(false, mailchecker::is_valid("\nok@gmail.com\n"));
assert_eq!(false, mailchecker::is_valid("ok@guerrillamailblock.com"));

Elixir

Code.require_file("mail_checker.ex", "mailchecker/platform/elixir/")

unless MailChecker.valid?("myemail@yopmail.com") do
 raise "O RLY !"
end

unless MailChecker.valid?("myemail.com") do
 raise "O RLY !"
end

Clojure

; no package yet; just drop in mailchecker.clj where you want to use it.
(load-file "platform/clojure/mailchecker.clj")

(if (not (mailchecker/valid? "myemail@yopmail.com"))
 (throw (Throwable. "O RLY!")))

(if (not (mailchecker/valid? "myemail.com"))
 (throw (Throwable. "O RLY!")))

Go

package main

import (
 "log"

 mail_checker "github.com/FGRibreau/mailchecker/v6/platform/go"
)

if !mail_checker.IsValid("myemail@yopmail.com") {
 log.Fatal("O RLY !");
}

if !mail_checker.IsValid("myemail.com") {
 log.Fatal("O RLY !")
}

Installation

Go

go get github.com/FGRibreau/mailchecker/v6/platform/go

NodeJS/JavaScript

npm install mailchecker

Ruby

gem install ruby-mailchecker

PHP

composer require fgribreau/mailchecker

We accept pull-requests for other package manager.

Data sources

TorVPN

 $('td', 'table:last').map(function(){
 return this.innerText;
 }).toArray();

BloggingWV

 Array.prototype.slice.call(document.querySelectorAll('.entry > ul > li a')).map(function(el){return el.innerText});

... please add your own dataset to list.txt.

Regenerate libraries from list.txt

Just run (requires NodeJS):

npm run build

Development

Development environment requires docker.

# install and setup every language dependencies in parallel through docker
npm install

# run every language setup in parallel through docker
npm run setup

# run every language tests in parallel through docker
npm test

Backers

Maintainers

These amazing people are maintaining this project:

Sponsors

No sponsors yet! Will you be the first?

πŸ‘ Patreon donate button
πŸ‘ Gratipay donate button
πŸ‘ Flattr donate button
πŸ‘ PayPal donate button
πŸ‘ crypto donate button

Contributors

These amazing people have contributed code to this project:

Discover how you can contribute by heading on over to the CONTRIBUTING.md file.

Changelog

License

Unless stated otherwise all works are:

and licensed under: