Class: ESS::Validation::TextIsValidEmail

Inherits:
Object
  • Object
show all
Defined in:
lib/ess/validation.rb

Constant Summary collapse

EMAIL_PATTERN =
/\A([^@\s]+)@((?:[-a-z0-9]+\.)+[a-z]{2,})\Z/i
SERVER_TIMEOUT =
10

Instance Method Summary collapse

Instance Method Details

#valid_domain?(email) ⇒ Boolean

Returns:

  • (Boolean)


37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
# File 'lib/ess/validation.rb', line 37

def valid_domain?(email)
  domain = email.match(EMAIL_PATTERN)[2]
  dns = Resolv::DNS.new
  Timeout::timeout(SERVER_TIMEOUT) do

    # Check the MX record
    mx_records = dns.getresources(domain, Resolv::DNS::Resource::IN::MX)

    mx_records.sort_by {|mx| mx.preference}.each do |mx|
      a_records = dns.getresources(mx.exchange.to_s, Resolv::DNS::Resource::IN::A)
      return true if a_records.any?
    end

     #Try a straight A record
     a_records = dns.getresources(domain, Resolv::DNS::Resource::IN::A)
     a_records.any?
   end
rescue Timeout::Error, Errno::ECONNREFUSED
  false
end

#validate(tag) ⇒ Object

Raises:

  • (InvalidValueError)


29
30
31
32
# File 'lib/ess/validation.rb', line 29

def validate tag
  return if valid_domain?(tag.text!)
  raise InvalidValueError, "the email \"#{tag.text!}\" could not be validated"
end