Skip to content

Instantly share code, notes, and snippets.

@jurajmasar
Created March 14, 2014 00:07
Show Gist options
  • Save jurajmasar/9539711 to your computer and use it in GitHub Desktop.
Save jurajmasar/9539711 to your computer and use it in GitHub Desktop.
Simple e-mail address validator script that makes a request to e-mail adress' smtp server.
#
# email_validator.rb
#
# Simple e-mail address validator script that makes a request to e-mail adress' smtp server.
#
# Released under MIT license.
# Permission is hereby granted, free of charge, to any person obtaining
# a copy of this software and associated documentation files (the
# "Software"), to deal in the Software without restriction, including
# without limitation the rights to use, copy, modify, merge, publish,
# distribute, sublicense, and/or sell copies of the Software, and to
# permit persons to whom the Software is furnished to do so, subject to
# the following conditions:
# The above copyright notice and this permission notice shall be
# included in all copies or substantial portions of the Software.
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
def is_email_address_valid?(input)
require 'resolv'
mail_servers = Resolv::DNS.open.getresources(input.split('@')[1], Resolv::DNS::Resource::IN::MX)
if mail_servers.empty?
return false
else
require 'net/smtp'
mail_servers.each do |mail_server|
Net::SMTP.start(mail_server.exchange.to_s, 25) do |smtp|
if smtp.helo("jurajmasar.com").status == '250'
smtp.mailfrom("test@jurajmasar.com")
begin
return true if smtp.rcptto(input).status == '250'
rescue
return false
end
else
next
end
end
end
end
end
puts is_email_address_valid? ARGV[0]
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment