namemail_worker.rb 2.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  1. class NamemailWorker
  2. include Sidekiq::Worker
  3. sidekiq_options :queue => 'validation', :retry => false, :backtrace => true #, expires_in: 1.day
  4. def perform(first, last, domain)
  5. checker = ["hello", $public_hostname].join("@")
  6. validator = EmailAuthentication::Base.new
  7. combos = self.permutate(first,last,domain)
  8. combos.each do |possible_email|
  9. result = validator.check(possible_email, checker)
  10. if result and result[0]
  11. email = EmailLead.new(:address => possible_email, :user_id => 1, :domain => domain)
  12. email.smtp_reply = result[1].to_s.first(255)
  13. email.is_valid = true
  14. email.save
  15. puts "#{email.address} is valid!"
  16. end
  17. end
  18. end
  19. def permutate(first_name, last_name, domain)
  20. first_initial = first_name[0]
  21. last_initial = last_name[0]
  22. # Define each name permutation manually
  23. name_permutations = <<PERMS
  24. {first_name}
  25. {last_name}
  26. {first_initial}
  27. {last_initial}
  28. {first_name}{last_name}
  29. {first_name}.{last_name}
  30. {first_initial}{last_name}
  31. {first_initial}.{last_name}
  32. {first_name}{last_initial}
  33. {first_name}.{last_initial}
  34. {first_initial}{last_initial}
  35. {first_initial}.{last_initial}
  36. {last_name}{first_name}
  37. {last_name}.{first_name}
  38. {last_name}{first_initial}
  39. {last_name}.{first_initial}
  40. {last_initial}{first_name}
  41. {last_initial}.{first_name}
  42. {last_initial}{first_initial}
  43. {last_initial}.{first_initial}
  44. {first_name}-{last_name}
  45. {first_initial}-{last_name}
  46. {first_name}-{last_initial}
  47. {first_initial}-{last_initial}
  48. {last_name}-{first_name}
  49. {last_name}-{first_initial}
  50. {last_initial}-{first_name}
  51. {last_initial}-{first_initial}
  52. {first_name}_{last_name}
  53. {first_initial}_{last_name}
  54. {first_name}_{last_initial}
  55. {first_initial}_{last_initial}
  56. {last_name}_{first_name}
  57. {last_name}_{first_initial}
  58. {last_initial}_{first_name}
  59. {last_initial}_{first_initial}
  60. PERMS
  61. # substitutions to get all permutations to an Array
  62. name_permutations = name_permutations.gsub('{first_name}', first_name)
  63. .gsub('{last_name}', last_name)
  64. .gsub('{first_initial}', first_initial)
  65. .gsub('{last_initial}', last_initial)
  66. .split($/)
  67. # accept domain arg to be a string or an array
  68. # %40 => @
  69. if domain.is_a? String
  70. domain = ['@'].product domain.split
  71. elsif domain.is_a? Array
  72. domain = ['@'].product domain
  73. else
  74. raise ArgumentError, 'Domain was neither a String or Array'
  75. end
  76. name_and_domains = name_permutations.product domain
  77. # combine names and domains
  78. # return permuations
  79. permutations = name_and_domains.map {|email| email.join }
  80. permutations
  81. end
  82. end