diff --git a/app/jobs/verify_emails_job.rb b/app/jobs/verify_emails_job.rb index 20c172770..d7d512961 100644 --- a/app/jobs/verify_emails_job.rb +++ b/app/jobs/verify_emails_job.rb @@ -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) diff --git a/app/models/email_address_verification.rb b/app/models/email_address_verification.rb index edcdbaa35..57b75fcb4 100644 --- a/app/models/email_address_verification.rb +++ b/app/models/email_address_verification.rb @@ -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, diff --git a/lib/tasks/verify_email.rake b/lib/tasks/verify_email.rake new file mode 100644 index 000000000..da94e7edb --- /dev/null +++ b/lib/tasks/verify_email.rake @@ -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