class MX::Validator
Public Class Methods
validate(email)
click to toggle source
# File lib/mx-validator.rb, line 9 def validate(email) # simple regex check return false unless RegexValidator.validate(email) # get list of smtp servers smtp_server = Resolver.new(email).smtp_servers().first # final validation connect_to_smtp_validate(email, smtp_server) end
Private Class Methods
connect_to_smtp_validate(email, host)
click to toggle source
# File lib/mx-validator.rb, line 22 def connect_to_smtp_validate(email, host) server = Net::Telnet::new("Host" => host, "Timeout" => 100, "Port" => 25) generated_dummy_mail = generate_dummy_username() + "@gmail.com" commands = ["helo MX-VALIDATOR", "mail from:<#{generated_dummy_mail}>", "rcpt to:<#{email}>","quit" ] commands.each do |command| server.puts(command) server.waitfor(/./) do |data| return false if data =~ (/5\..?\..?/) end end return true end
generate_dummy_username(size = 8)
click to toggle source
# File lib/mx-validator.rb, line 37 def generate_dummy_username(size = 8) charset = %w{ 2 3 4 6 7 8 9 A B C D E F G H J K M N P Q R T V W X Y Z} (0...size).map{ charset.to_a[rand(charset.size)] }.join end