# MailChecker [![PyPi version](https://img.shields.io/pypi/v/mailchecker.svg)](https://pypi.org/project/mailchecker/#history) ![PyPI - Downloads](https://img.shields.io/pypi/dm/mailchecker) [![Cargo version](https://img.shields.io/crates/v/mailchecker.svg)](https://crates.io/crates/mailchecker) ![Crates.io](https://img.shields.io/crates/d/mailchecker) [![NPM version](https://img.shields.io/npm/v/mailchecker.svg)](http://badge.fury.io/js/mailchecker) ![npm](https://img.shields.io/npm/dm/mailchecker) [![Gem version](https://img.shields.io/gem/v/ruby-mailchecker.svg)](http://badge.fury.io/js/mailchecker) ![Gem](https://img.shields.io/gem/dt/mailchecker) [![Packagist version](https://img.shields.io/packagist/v/fgribreau/mailchecker.svg)](https://packagist.org/packages/fgribreau/mailchecker) ![Packagist](https://img.shields.io/packagist/dm/fgribreau/mailchecker) [![GoDoc](https://godoc.org/github.com/FGRibreau/mailchecker/platform/go?status.svg)](https://godoc.org/github.com/FGRibreau/mailchecker/platform/go) [![Get help on Codementor](https://cdn.codementor.io/badges/get_help_github.svg)](https://www.codementor.io/francois-guillaume-ribreau?utm_source=github&utm_medium=button&utm_term=francois-guillaume-ribreau&utm_campaign=github) [![available-for-advisory](https://img.shields.io/badge/available%20for%20advising-yes-ff69b4.svg?)](http://bit.ly/2c7uFJq) ![extra](https://img.shields.io/badge/actively%20maintained-yes-ff69b4.svg?) [![Slack](https://img.shields.io/badge/Slack-Join%20our%20tech%20community-17202A?logo=slack)](https://join.slack.com/t/fgribreau/shared_invite/zt-edpjwt2t-Zh39mDUMNQ0QOr9qOj~jrg) Cross-language email validation. Backed by a [database](./list.txt) of **over 55 000 throwable email domains**. * Validate the format of your email (uses [validator.js](https://github.com/chriso/validator.js/blob/master/validator.js#L38) email regex underneath and `FILTER_VALIDATE_EMAIL` for PHP) * Validate if the email is not a **temporary mail** (yopmail-like..., [add your own dataset to list.txt](./list.txt)) 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". ------------------------- > Need to provide Webhooks inside your SaaS? - [Try Hook0, an open-source self-hostable webhook micro-service](https://www.hook0.com/) > Need to embed a charts into an email? > > It's over with **[Image-Charts](https://image-charts.com?gh_mailchecker)**, no more server-side rendering pain, 1 url = 1 chart. ``` https://image-charts.com/chart? cht=lc // chart type &chd=s:cEAELFJHHHKUju9uuXUc // chart data &chxt=x,y // axis &chxl=0:|0|1|2|3|4|5| // axis labels &chs=873x200 // size ```

Use Image-Charts for free

------------------------ # Upgrade ## From 3.x to 4.x - PHP ```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 ```python import MailChecker m = MailChecker.MailChecker() if not m.is_valid('bla@example.com'): # ... ``` became: ```python import MailChecker if not MailChecker.is_valid('bla@example.com'): # ... ``` ------------------------- MailChecker currently supports: * [NodeJS](https://github.com/FGRibreau/mailchecker/tree/master/platform/node) (CommonJS, [Instructions](#nodejs)) * [JavaScript](https://github.com/FGRibreau/mailchecker/tree/master/platform/javascript) (Client-Side, [Instructions](#javascript)) * [PHP](https://github.com/FGRibreau/mailchecker/tree/master/platform/php) ([Instructions](#php)) * [Python](https://github.com/FGRibreau/mailchecker/tree/master/platform/python) ([Instructions](#python)) * [Ruby](https://github.com/FGRibreau/mailchecker/tree/master/platform/ruby) ([Instructions](#ruby)) * [Rust](https://github.com/FGRibreau/mailchecker/tree/master/platform/rust) ([Instructions](#rust)) * [Elixir](https://github.com/FGRibreau/mailchecker/tree/master/platform/elixir) ([Instructions](#elixir)) * [Clojure](https://github.com/FGRibreau/mailchecker/tree/master/platform/clojure) ([Instructions](#clojure)) * [Go](https://github.com/FGRibreau/mailchecker/tree/master/platform/go) ([Instructions](#go)) * **Easily add support for your own language with MailChecker template system and [send us a pull-request!](https://github.com/FGRibreau/mailchecker/fork_select)** ------------------------- ## Usage ### NodeJS ```javascript 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 ```html ``` ### PHP ```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 ``` ```python # 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 ```ruby require 'mail_checker' unless MailChecker.valid?('myemail@yopmail.com') fail('O RLY!') end ``` ### Rust ```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 ```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 ```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 ```go package main import ( "log" "github.com/FGRibreau/mailchecker/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 ```bash go get https://github.com/FGRibreau/mailchecker ``` NodeJS/JavaScript ```bash npm install mailchecker ``` Ruby ```bash gem install ruby-mailchecker ``` PHP ```bash composer require fgribreau/mailchecker ``` __We accept pull-requests for other package manager__. ## Data sources [TorVPN](http://torvpn.com/temporaryemail.html) ```javascript $('td', 'table:last').map(function(){ return this.innerText; }).toArray(); ``` [BloggingWV](http://www.bloggingwv.com/big-list-of-disposable-temporary-email-services/) ```javascript Array.prototype.slice.call(document.querySelectorAll('.entry > ul > li a')).map(function(el){return el.innerText}); ``` ... [please add your own dataset to list.txt](./list.txt). Regenerate libraries from list.txt ------------------------------- Just run (requires NodeJS): ``` npm run build ``` ## Development Development environment requires [docker](https://www.docker.com/). ```sh # 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](/CHANGELOG.md)

License

Unless stated otherwise all works are: and licensed under: