Class: EmailChecker::Domain

Inherits:
Object
  • Object
show all
Defined in:
lib/email_checker/domain.rb

Instance Method Summary collapse

Constructor Details

#initialize(domain) ⇒ Domain

Returns a new instance of Domain.



3
4
5
# File 'lib/email_checker/domain.rb', line 3

def initialize(domain)
  @domain = domain
end

Instance Method Details

#a_recordsObject



39
40
41
# File 'lib/email_checker/domain.rb', line 39

def a_records
  @a_records ||= dns.getresources(@domain, Resolv::DNS::Resource::IN::A)
end

#a_records?Boolean

Check if the domain exists validation that has at least 1 A record.

Returns:

  • (Boolean)


35
36
37
# File 'lib/email_checker/domain.rb', line 35

def a_records?
  a_records.any?
end

#mx_recordsObject



43
44
45
# File 'lib/email_checker/domain.rb', line 43

def mx_records
  @mx_records ||= dns.getresources(@domain, Resolv::DNS::Resource::IN::MX).sort_by(&:preference)
end

#mx_serversObject



47
48
49
50
51
52
53
54
# File 'lib/email_checker/domain.rb', line 47

def mx_servers
  return @mx_servers if @mx_servers
  @mx_servers = []
  mx_records.each do |mx|
    @mx_servers.push(preference: mx.preference, address: mx.exchange.to_s)
  end
  @mx_servers
end

#valid?type

Checks if the domian exists and has valid MX and A records

Returns:

  • (type)
    description


10
11
12
13
14
15
16
17
18
# File 'lib/email_checker/domain.rb', line 10

def valid?
  return false unless @domain
  Timeout.timeout(SERVER_TIMEOUT) do
    return true if valid_mx_records?
    return true if a_records?
  end
rescue Timeout::Error, Errno::ECONNREFUSED
  false
end

#valid_mx_records?Boolean

Check if it has valid MX records and it can receive emails. The MX server exists and it has valid A records.

Returns:

  • (Boolean)


24
25
26
27
28
29
30
# File 'lib/email_checker/domain.rb', line 24

def valid_mx_records?
  mx_servers.each do |server|
    exchange_a_records = dns.getresources(server[:address], Resolv::DNS::Resource::IN::A)
    return true if exchange_a_records.any?
  end
  false
end