class ValidEmail2::Address
Constants
- DEFAULT_RECIPIENT_DELIMITER
- DOT_DELIMITER
- PROHIBITED_DOMAIN_CHARACTERS_REGEX
Attributes
address[RW]
Public Class Methods
new(address, dns_timeout = 5, dns_nameserver = nil)
click to toggle source
# File lib/valid_email2/address.rb, line 25 def initialize(address, dns_timeout = 5, dns_nameserver = nil) @parse_error = false @raw_address = address @dns_timeout = dns_timeout @dns_nameserver = dns_nameserver begin @address = Mail::Address.new(address) rescue Mail::Field::ParseError @parse_error = true end @parse_error ||= address_contain_emoticons? end
prohibited_domain_characters_regex()
click to toggle source
# File lib/valid_email2/address.rb, line 17 def self.prohibited_domain_characters_regex @prohibited_domain_characters_regex ||= PROHIBITED_DOMAIN_CHARACTERS_REGEX end
prohibited_domain_characters_regex=(val)
click to toggle source
# File lib/valid_email2/address.rb, line 21 def self.prohibited_domain_characters_regex=(val) @prohibited_domain_characters_regex = val end
Public Instance Methods
allow_listed?()
click to toggle source
# File lib/valid_email2/address.rb, line 87 def allow_listed? domain_is_in?(ValidEmail2.allow_list) end
deny_listed?()
click to toggle source
# File lib/valid_email2/address.rb, line 91 def deny_listed? valid? && domain_is_in?(ValidEmail2.deny_list) end
disposable?()
click to toggle source
# File lib/valid_email2/address.rb, line 75 def disposable? disposable_domain? || disposable_mx_server? end
disposable_domain?()
click to toggle source
# File lib/valid_email2/address.rb, line 79 def disposable_domain? domain_is_in?(ValidEmail2.disposable_emails) end
disposable_mx_server?()
click to toggle source
# File lib/valid_email2/address.rb, line 83 def disposable_mx_server? valid? && mx_server_is_in?(ValidEmail2.disposable_emails) end
dotted?()
click to toggle source
# File lib/valid_email2/address.rb, line 67 def dotted? valid? && address.local.include?(DOT_DELIMITER) end
subaddressed?()
click to toggle source
# File lib/valid_email2/address.rb, line 71 def subaddressed? valid? && address.local.include?(DEFAULT_RECIPIENT_DELIMITER) end
valid?()
click to toggle source
# File lib/valid_email2/address.rb, line 40 def valid? return @valid unless @valid.nil? return false if @parse_error @valid = valid_domain? && valid_address? end
valid_address?()
click to toggle source
# File lib/valid_email2/address.rb, line 59 def valid_address? return false if address.address != @raw_address !address.local.include?('..') && !address.local.end_with?('.') && !address.local.start_with?('.') end
valid_domain?()
click to toggle source
# File lib/valid_email2/address.rb, line 47 def valid_domain? domain = address.domain return false if domain.nil? domain !~ self.class.prohibited_domain_characters_regex && domain.include?('.') && !domain.include?('..') && !domain.start_with?('.') && !domain.start_with?('-') && !domain.include?('-.') end
valid_mx?()
click to toggle source
# File lib/valid_email2/address.rb, line 95 def valid_mx? return false unless valid? return false if null_mx? mx_or_a_servers.any? end
valid_strict_mx?()
click to toggle source
# File lib/valid_email2/address.rb, line 102 def valid_strict_mx? return false unless valid? return false if null_mx? mx_servers.any? end
Private Instance Methods
address_contain_emoticons?()
click to toggle source
# File lib/valid_email2/address.rb, line 133 def address_contain_emoticons? return false if @raw_address.nil? @raw_address.scan(Unicode::Emoji::REGEX).length >= 1 end
domain_is_in?(domain_list)
click to toggle source
# File lib/valid_email2/address.rb, line 111 def domain_is_in?(domain_list) address_domain = address.domain.downcase return true if domain_list.include?(address_domain) i = address_domain.index('.') return false unless i domain_list.include?(address_domain[(i + 1)..-1]) end
mx_or_a_servers()
click to toggle source
# File lib/valid_email2/address.rb, line 164 def mx_or_a_servers @mx_or_a_servers_cache ||= ValidEmail2::DnsRecordsCache.new @mx_or_a_servers_cache.fetch(address.domain.downcase) do Resolv::DNS.open(resolv_config) do |dns| dns.timeouts = @dns_timeout (mx_servers.any? && mx_servers) || dns.getresources(address.domain, Resolv::DNS::Resource::IN::A) end end end
mx_server_is_in?(domain_list)
click to toggle source
# File lib/valid_email2/address.rb, line 121 def mx_server_is_in?(domain_list) mx_servers.any? { |mx_server| return false unless mx_server.respond_to?(:exchange) mx_server = mx_server.exchange.to_s domain_list.any? { |domain| mx_server.end_with?(domain) && mx_server =~ /\A(?:.+\.)*?#{domain}\z/ } } end
mx_servers()
click to toggle source
# File lib/valid_email2/address.rb, line 149 def mx_servers @mx_servers_cache ||= ValidEmail2::DnsRecordsCache.new @mx_servers_cache.fetch(address.domain.downcase) do Resolv::DNS.open(resolv_config) do |dns| dns.timeouts = @dns_timeout dns.getresources(address.domain, Resolv::DNS::Resource::IN::MX) end end end
null_mx?()
click to toggle source
# File lib/valid_email2/address.rb, line 160 def null_mx? mx_servers.length == 1 && mx_servers.first.preference == 0 && mx_servers.first.exchange.length == 0 end
resolv_config()
click to toggle source
# File lib/valid_email2/address.rb, line 139 def resolv_config @resolv_config ||= begin config = Resolv::DNS::Config.default_config_hash config[:nameserver] = @dns_nameserver if @dns_nameserver config end @resolv_config end