class MailCheck
Public Class Methods
get_mail_server(host)
click to toggle source
# File lib/rails/real/email/mail_check.rb, line 92 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.sort {|x,y| x.preference <=> y.preference}.first.exchange.to_s end nil end
run(addr, server = nil, decoy_from = nil)
click to toggle source
# File lib/rails/real/email/mail_check.rb, line 59 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 ||= "#{ENV['USER']}@#{ENV['HOSTNAME']}" ret = nil begin MailCheck.start(server) do |smtp| ret = smtp.check_mail_addr(addr, decoy_from) ret = MailCheckStatus.new(ret[0..2].to_i) end rescue Net::SMTPAuthenticationError, Net::SMTPServerBusy, Net::SMTPSyntaxError, Net::SMTPFatalError, Net::SMTPUnknownError => error ret = MailCheckStatus.new(error.to_s[0..2].to_i, error) rescue IOError, TimeoutError, ArgumentError => error ret = MailCheckStatus.new(-1, error) end return ret end
Public Instance Methods
check_mail_addr(to_addr, decoy_from = nil)
click to toggle source
# File lib/rails/real/email/mail_check.rb, line 85 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