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