class MailBoxValidator::MailBox

Public Instance Methods

mail_exchanger_record_for(domain) click to toggle source
# File lib/mail_box_validator/mail_box.rb, line 14
def mail_exchanger_record_for(domain)
  Resolv::DNS.open do |dns|
    dns.getresources(domain, Resolv::DNS::Resource::IN::MX).map { |r| r.exchange.to_s }
  end
end
valid?(mail_address) click to toggle source
# File lib/mail_box_validator/mail_box.rb, line 8
def valid?(mail_address)
  domain = mail_address.slice(/@(.*)/, 1)
  mx = mail_exchanger_record_for(domain)
  mx.present? && mx.any?(&return_valid?(mail_address))
end

Private Instance Methods

response_for(mail_address, host) click to toggle source
# File lib/mail_box_validator/mail_box.rb, line 28
def response_for(mail_address, host)
  response = ''
  telnet = Net::Telnet::new(
    'Host' => host,
    'Port' => 25,
    'Telnetmode' => true,
    'Prompt' => /\d{3}.*/n
    )
  telnet.cmd('helo #{mail_address}')
  telnet.cmd("mail from: <#{mail_address}>")
  telnet.cmd("rcpt to: <#{mail_address}>") { |c| response = c }
  telnet.close
  response
end
return_valid?(mail_address) click to toggle source
# File lib/mail_box_validator/mail_box.rb, line 22
def return_valid?(mail_address)
  Proc.new do |host|
    response_for(mail_address, host).match(/^2\d{2}/).present?
  end
end