class ValidEmail2::Address
Constants
- DEFAULT_RECIPIENT_DELIMITER
- DOT_DELIMITER
- PROHIBITED_DOMAIN_CHARACTERS_REGEX
Attributes
Public Class Methods
Source
# File lib/valid_email2/address.rb, line 31 def initialize(address, dns = Dns.new) @parse_error = false @raw_address = address @dns = dns begin @address = Mail::Address.new(address) rescue Mail::Field::ParseError @parse_error = true end @parse_error ||= address_contain_multibyte_characters? end
Source
# File lib/valid_email2/address.rb, line 23 def self.permitted_multibyte_characters_regex @permitted_multibyte_characters_regex end
Source
# File lib/valid_email2/address.rb, line 27 def self.permitted_multibyte_characters_regex=(val) @permitted_multibyte_characters_regex = val end
Source
# File lib/valid_email2/address.rb, line 15 def self.prohibited_domain_characters_regex @prohibited_domain_characters_regex ||= PROHIBITED_DOMAIN_CHARACTERS_REGEX end
Source
# File lib/valid_email2/address.rb, line 19 def self.prohibited_domain_characters_regex=(val) @prohibited_domain_characters_regex = val end
Public Instance Methods
Source
# File lib/valid_email2/address.rb, line 88 def allow_listed? domain_is_in?(address.domain, ValidEmail2.allow_list) end
Source
# File lib/valid_email2/address.rb, line 92 def deny_listed? valid? && domain_is_in?(address.domain, ValidEmail2.deny_list) end
Source
# File lib/valid_email2/address.rb, line 80 def disposable? disposable_domain? || disposable_mx_server? end
Source
# File lib/valid_email2/address.rb, line 84 def disposable_domain? domain_is_in?(address.domain, ValidEmail2.disposable_emails) end
Source
# File lib/valid_email2/address.rb, line 72 def dotted? valid? && address.local.include?(DOT_DELIMITER) end
Source
# File lib/valid_email2/address.rb, line 76 def subaddressed? valid? && address.local.include?(DEFAULT_RECIPIENT_DELIMITER) end
Source
# File lib/valid_email2/address.rb, line 45 def valid? return @valid unless @valid.nil? return false if @parse_error @valid = valid_domain? && valid_address? end
Source
# File lib/valid_email2/address.rb, line 64 def valid_address? return false if address.address != @raw_address !address.local.include?('..') && !address.local.end_with?('.') && !address.local.start_with?('.') end
Source
# File lib/valid_email2/address.rb, line 52 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
Source
# File lib/valid_email2/address.rb, line 96 def valid_mx? return false unless valid? return false if null_mx? @dns.mx_servers(address.domain).any? || @dns.a_servers(address.domain).any? end
Source
# File lib/valid_email2/address.rb, line 103 def valid_strict_mx? return false unless valid? return false if null_mx? @dns.mx_servers(address.domain).any? end
Private Instance Methods
Source
# File lib/valid_email2/address.rb, line 140 def address_contain_multibyte_characters? return false if @raw_address.nil? return false if @raw_address.ascii_only? @raw_address.each_char.any? { |char| char.bytesize > 1 && char !~ self.class.permitted_multibyte_characters_regex } end
Source
# File lib/valid_email2/address.rb, line 112 def disposable_mx_server? mx_server_is_in?(ValidEmail2.disposable_emails) end
Source
# File lib/valid_email2/address.rb, line 122 def domain_is_in?(address_domains, domain_list) Array(address_domains).any? do |address_domain| address_domain = address_domain.downcase return true if domain_list.include?(address_domain) tokens = address_domain.split('.') return false if tokens.length < 3 # check only 6 elements deep 2.upto(6).each do |depth| limited_sub_domain_part = tokens.reverse.first(depth).reverse.join('.') return true if domain_list.include?(limited_sub_domain_part) end false end end
Source
# File lib/valid_email2/address.rb, line 117 def mx_server_is_in?(domain_list) address_domains = @dns.mx_servers(address.domain).map(&:exchange).map(&:to_s) domain_is_in?(address_domains, domain_list) end
TODO: (PS) keep this for backward compatibility with the test setup described in the reamde
Source
# File lib/valid_email2/address.rb, line 148 def null_mx? mx_servers = @dns.mx_servers(address.domain) mx_servers.length == 1 && mx_servers.first.preference == 0 && mx_servers.first.exchange.length == 0 end