class EmailDetected::Checker
Public Class Methods
get_mail_server(host)
click to toggle source
# File lib/email_detected/checker.rb, line 94 def self.get_mail_server(host) res = Resolv::DNS.new.getresources(host, Resolv::DNS::Resource::IN::MX) unless res.empty? # FIXME: should return the whole list return res.min { |x, y| x.preference <=> y.preference }.exchange.to_s end nil end
run(addr, server = nil, decoy_from = nil)
click to toggle source
# File lib/email_detected/checker.rb, line 61 def self.run(addr, server = nil, decoy_from = nil) # FIXME: needs a better mail address parser server = get_mail_server(addr[(addr.index('@') + 1)..-1]) if server.nil? # This only needs to be something the receiving SMTP server # accepts. We aren't actually sending any mail. decoy_from ||= EmailDetected.config.verifier_email ret = nil begin EmailDetected::Checker.start(server) do |smtp| ret = smtp.check_mail_addr(addr, decoy_from) ret = MailCheckStatus.new(ret.status.to_i) end rescue Net::SMTPAuthenticationError, Net::SMTPServerBusy, Net::SMTPSyntaxError, Net::SMTPFatalError, Net::SMTPUnknownError => e ret = MailCheckStatus.new(e.to_s[0..2].to_i, e) rescue IOError, TimeoutError, ArgumentError => e ret = MailCheckStatus.new(-1, e) end ret end
Public Instance Methods
check_mail_addr(to_addr, decoy_from = nil)
click to toggle source
# File lib/email_detected/checker.rb, line 86 def check_mail_addr(to_addr, decoy_from = nil) raise IOError, 'closed session' unless @socket raise ArgumentError, 'mail destination not given' if to_addr.empty? mailfrom decoy_from rcptto to_addr end