module Ampersat

Constants

VERSION

Public Class Methods

domains(email_list, column=0) click to toggle source
# File lib/ampersat.rb, line 9
def self.domains(email_list, column=0)
  domains = Hash.new(0)

  CSV.foreach(email_list) do |row|
    domain = Ampersat.find_domain(row[column])
    domains[domain] = domains[domain] + 1
  end

  domains.sort_by {|key, value| - value}
end
find_domain(email) click to toggle source
# File lib/ampersat.rb, line 37
def self.find_domain(email)
  email.split('@').last.downcase
end
find_mx(domain) click to toggle source
# File lib/ampersat.rb, line 41
def self.find_mx(domain)
  @mxs ||= {}
  @mxs[domain] ||= begin
    Resolv::DNS.open(nameserver: '8.8.8.8') do |dns|
      next unless PublicSuffix.valid?(domain)
      response = dns.getresources(domain, Resolv::DNS::Resource::IN::MX)
      next unless response.any?
      response.collect { |r| r.exchange.to_s.downcase }.sort.first
    end
  end
end
mxs(email_list, column=0) click to toggle source
# File lib/ampersat.rb, line 20
def self.mxs(email_list, column=0)
  mxs = {}
  domains = Ampersat.domains(email_list, column)
  progressbar = ProgressBar.create(format: '%t: %c / %C |%B|', starting_at: 0, total: domains.length)
  domains.pmap(100) do |domain, qty|
    mx = Ampersat.find_mx(domain)
    mxs[mx] ||= {}
    mxs[mx]['domains'] ||= []
    mxs[mx]['domains'] << domain
    mxs[mx]['addresses'] ||= 0
    mxs[mx]['addresses'] = mxs[mx]['addresses'] + qty
    progressbar.increment
  end

  mxs.sort_by {|key, value| - value['addresses'] }
end