Class: ESS::Validation::TextIsValidEmail
- Inherits:
-
Object
- Object
- ESS::Validation::TextIsValidEmail
- 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
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
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 |