Class: ValidEmail2::Address

Inherits:
Object
  • Object
show all
Defined in:
lib/valid_email2/address.rb

Constant Summary collapse

PROHIBITED_DOMAIN_CHARACTERS_REGEX =
/[+!_\/\s'#`|]/
DEFAULT_RECIPIENT_DELIMITER =
'+'
DOT_DELIMITER =
'.'
HYPHEN_DELIMITER =
'-'
MAX_DOMAIN_LENGTH =
253
MAX_LABEL_LENGTH =
63

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(address, dns = Dns.new) ⇒ Address

Returns a new instance of Address.



34
35
36
37
38
39
40
41
42
43
44
45
46
# File 'lib/valid_email2/address.rb', line 34

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

Instance Attribute Details

#addressObject

Returns the value of attribute address.



9
10
11
# File 'lib/valid_email2/address.rb', line 9

def address
  @address
end

Class Method Details

.permitted_multibyte_characters_regexObject



26
27
28
# File 'lib/valid_email2/address.rb', line 26

def self.permitted_multibyte_characters_regex
  @permitted_multibyte_characters_regex
end

.permitted_multibyte_characters_regex=(val) ⇒ Object



30
31
32
# File 'lib/valid_email2/address.rb', line 30

def self.permitted_multibyte_characters_regex=(val)
  @permitted_multibyte_characters_regex = val
end

.prohibited_domain_characters_regexObject



18
19
20
# File 'lib/valid_email2/address.rb', line 18

def self.prohibited_domain_characters_regex
  @prohibited_domain_characters_regex ||= PROHIBITED_DOMAIN_CHARACTERS_REGEX
end

.prohibited_domain_characters_regex=(val) ⇒ Object



22
23
24
# File 'lib/valid_email2/address.rb', line 22

def self.prohibited_domain_characters_regex=(val)
  @prohibited_domain_characters_regex = val
end

Instance Method Details

#allow_listed?Boolean

Returns:

  • (Boolean)


91
92
93
# File 'lib/valid_email2/address.rb', line 91

def allow_listed?
  valid? && domain_is_in?(address.domain, ValidEmail2.allow_list)
end

#deny_listed?Boolean

Returns:

  • (Boolean)


95
96
97
# File 'lib/valid_email2/address.rb', line 95

def deny_listed?
  valid? && domain_is_in?(address.domain, ValidEmail2.deny_list)
end

#disposable?Boolean

Returns:

  • (Boolean)


83
84
85
# File 'lib/valid_email2/address.rb', line 83

def disposable?
  disposable_domain? || disposable_mx_server?
end

#disposable_domain?Boolean

Returns:

  • (Boolean)


87
88
89
# File 'lib/valid_email2/address.rb', line 87

def disposable_domain?
  valid? && domain_is_in?(address.domain, ValidEmail2.disposable_emails)
end

#dotted?Boolean

Returns:

  • (Boolean)


75
76
77
# File 'lib/valid_email2/address.rb', line 75

def dotted?
  valid? && address.local.include?(DOT_DELIMITER)
end

#subaddressed?Boolean

Returns:

  • (Boolean)


79
80
81
# File 'lib/valid_email2/address.rb', line 79

def subaddressed?
  valid? && address.local.include?(DEFAULT_RECIPIENT_DELIMITER)
end

#valid?Boolean

Returns:

  • (Boolean)


48
49
50
51
52
53
# File 'lib/valid_email2/address.rb', line 48

def valid?
  return @valid unless @valid.nil?
  return false  if @parse_error

  @valid = valid_domain? && valid_address?
end

#valid_address?Boolean

Returns:

  • (Boolean)


67
68
69
70
71
72
73
# File 'lib/valid_email2/address.rb', line 67

def valid_address?
  return false if address.address != @raw_address

  !address.local.include?('..') &&
    !address.local.end_with?('.') &&
    !address.local.start_with?('.')
end

#valid_domain?Boolean

Returns:

  • (Boolean)


55
56
57
58
59
60
61
62
63
64
65
# File 'lib/valid_email2/address.rb', line 55

def valid_domain?
  domain = address.domain
  return false if domain.nil?
  return false if domain =~ self.class.prohibited_domain_characters_regex
  return false if domain.length > MAX_DOMAIN_LENGTH

  labels = domain.split(DOT_DELIMITER, -1)
  return false if labels.length < 2

  labels.all? { |label| valid_domain_label?(label) }
end

#valid_mx?Boolean

Returns:

  • (Boolean)


99
100
101
102
103
104
# File 'lib/valid_email2/address.rb', line 99

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

#valid_strict_mx?Boolean

Returns:

  • (Boolean)


106
107
108
109
110
111
# File 'lib/valid_email2/address.rb', line 106

def valid_strict_mx?
  return false unless valid?
  return false if null_mx?

  @dns.mx_servers(address.domain).any?
end