ValidEmail2

Build Status Gem Version

Validate emails with the help of the mail gem instead of some clunky regexp. Aditionally validate that the domain has a MX record. Optionally validate against a static list of disposable email services.

Why?

There are lots of other gems and libraries that validates email addresses but most of them use some clunky regexp. I also saw a need to be able to validate that the email address is not coming from a "disposable email" provider.

Is it production ready?

Yes, it is used in several production apps.

Installation

Add this line to your application's Gemfile:

gem "valid_email2"

And then execute:

$ bundle

Or install it yourself as:

$ gem install valid_email2

Usage

Use with ActiveModel

If you just want to validate that it is a valid email address:

class User < ActiveRecord::Base
  validates :email, presence: true, email: true
end

To validate that the domain has a MX record:

validates :email, email: { mx: true }

To validate that the domain is not a disposable email:

validates :email, email: { disposable: true }

To validate that the domain is not blacklisted (under vendor/blacklist.yml):

validates :email, email: { blacklist: true }

All together:

validates :email, email: { mx: true, disposable: true }

Note that this gem will let an empty email pass through so you will need to add presence: true if you require an email

Use without ActiveModel

address = ValidEmail2::Address.new("[email protected]")
address.valid? => true
address.disposable? => false
address.valid_mx? => true

Test environment

If you are validating mx then your specs will fail without an internet connection. It is a good idea to stub out that validation in your test environment.
Do so by adding this in your spec_helper:

config.before(:each) do
  allow_any_instance_of(ValidEmail2::Address).to receive(:valid_mx?) { true }
end

Requirements

This gem requires Rails 3.2 or 4.0 or higher. It is tested against both versions using:

  • Ruby-2.0
  • Ruby-2.1
  • Ruby-2.2
  • Ruby-2.3

Contributing

  1. Fork it
  2. Create your feature branch (git checkout -b my-new-feature)
  3. Commit your changes (git commit -am 'Add some feature')
  4. Push to the branch (git push origin my-new-feature)
  5. Create new Pull Request