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