Add email verification rake task

This commit is contained in:
Alex Sherman 2020-06-08 16:09:52 +05:00
parent ee7d69c1ce
commit a13725faa7
3 changed files with 35 additions and 7 deletions

View file

@ -1,8 +1,7 @@
class SendEInvoiceJob < Que::Job
class VerifyEmailsJob < Que::Job
def run(verification_id)
email_address_verification = run_condition(EmailAddressVerification
.find(run_condition(verification_id)))
email_address_verification = run_condition(EmailAddressVerification.find(verification_id))
ActiveRecord::Base.transaction do
email_address_verification.verify
@ -17,12 +16,14 @@ class SendEInvoiceJob < Que::Job
private
def run_condition(email_address_verification)
destroy unless email_address_verification
destroy if email_address_verification.recently_verified?
email_address_verification
end
def logger
Rails.logger
Rails.logger = Logger.new(STDOUT)
end
def log_success(verification)

View file

@ -1,14 +1,30 @@
class EmailAddressVerification < ApplicationRecord
RECENTLY_VERIFIED_PERIOD = 1.month
scope :not_verified_recently, -> {
where('verified_at IS NULL or verified_at < ?', verification_period)
}
scope :verified_recently, -> {
where('verified_at IS NOT NULL and verified_at >= ?', verification_period)
}
def recently_verified?
verified_at.present? &&
verified_at > Time.zone.now - RECENTLY_VERIFIED_PERIOD
verified_at > verification_period
end
def verification_period
self.class.verification_period
end
def self.verification_period
Time.zone.now - RECENTLY_VERIFIED_PERIOD
end
def verify
validation_request = Truemail.validate(email)
media = success ? :mx : :smtp
validation_request = Truemail.validate(email, with: media)
if validation_request.result.success
update(verified_at: Time.zone.now,

View file

@ -0,0 +1,11 @@
namespace :verify_email do
desc 'Stars verifying email jobs'
task all_domains: :environment do
verifications_by_domain = EmailAddressVerification.not_verified_recently.group_by(&:domain)
verifications_by_domain.each do |_domain, verifications|
ver = verifications[0] # Only first email to not to clog the SMTP servers
VerifyEmailsJob.enqueue(ver.id)
end
end
end