From 3d444c3a04bad57de0e37bf2aa94ade90a2aa6d3 Mon Sep 17 00:00:00 2001 From: Alex Sherman Date: Mon, 8 Jun 2020 16:16:06 +0500 Subject: [PATCH] Fix CC issues --- app/jobs/verify_emails_job.rb | 1 - app/models/concerns/email_checkable.rb | 20 +++++++++++-------- app/models/email_address_verification.rb | 7 ++++--- ...20200608084321_fill_email_verifications.rb | 8 +++++++- lib/tasks/verify_email.rake | 5 ++++- 5 files changed, 27 insertions(+), 14 deletions(-) diff --git a/app/jobs/verify_emails_job.rb b/app/jobs/verify_emails_job.rb index d7d512961..4da854870 100644 --- a/app/jobs/verify_emails_job.rb +++ b/app/jobs/verify_emails_job.rb @@ -1,5 +1,4 @@ class VerifyEmailsJob < Que::Job - def run(verification_id) email_address_verification = run_condition(EmailAddressVerification.find(verification_id)) diff --git a/app/models/concerns/email_checkable.rb b/app/models/concerns/email_checkable.rb index 5c82a0f9a..ba5784336 100644 --- a/app/models/concerns/email_checkable.rb +++ b/app/models/concerns/email_checkable.rb @@ -3,17 +3,21 @@ module Concerns extend ActiveSupport::Concern def email_verification - EmailAddressVerification.find_or_create_by(email: self.email, - domain: Mail::Address.new(self.email).domain) + EmailAddressVerification.find_or_create_by(email: email, + domain: domain(email)) end def billing_email_verification - if self.attribute_names.include?('billing_email') - EmailAddressVerification.find_or_create_by(email: self.billing_email, - domain: Mail::Address.new(self.email).domain) - else - nil - end + return unless attribute_names.include?('billing_email') + + EmailAddressVerification.find_or_create_by(email: billing_email, + domain: domain(email)) + end + + def domain(email) + Mail::Address.new(email).domain || 'not_found' + rescue Mail::Field::IncompleteParseError + 'not_found' end def verify_email_mx_smtp(field:, email:) diff --git a/app/models/email_address_verification.rb b/app/models/email_address_verification.rb index 57b75fcb4..bed0cfae3 100644 --- a/app/models/email_address_verification.rb +++ b/app/models/email_address_verification.rb @@ -1,11 +1,11 @@ class EmailAddressVerification < ApplicationRecord RECENTLY_VERIFIED_PERIOD = 1.month - scope :not_verified_recently, -> { + scope :not_verified_recently, lambda { where('verified_at IS NULL or verified_at < ?', verification_period) } - scope :verified_recently, -> { + scope :verified_recently, lambda { where('verified_at IS NOT NULL and verified_at >= ?', verification_period) } @@ -23,7 +23,8 @@ class EmailAddressVerification < ApplicationRecord end def verify - media = success ? :mx : :smtp + # media = success ? :mx : :smtp + media = :mx validation_request = Truemail.validate(email, with: media) if validation_request.result.success diff --git a/db/data/20200608084321_fill_email_verifications.rb b/db/data/20200608084321_fill_email_verifications.rb index f12381b3c..7d3da34ce 100644 --- a/db/data/20200608084321_fill_email_verifications.rb +++ b/db/data/20200608084321_fill_email_verifications.rb @@ -7,7 +7,7 @@ class FillEmailVerifications < ActiveRecord::Migration[6.0] emails = (contact_emails || registrar_emails || registrar_billing_emails).uniq result = emails.map do |email| - { email: email, domain: Mail::Address.new(email).domain || 'not_found' } + { email: email, domain: domain(email) } end EmailAddressVerification.import result, batch_size: 500 @@ -16,4 +16,10 @@ class FillEmailVerifications < ActiveRecord::Migration[6.0] def down EmailAddressVerification.delete_all end + + def domain(email) + Mail::Address.new(email).domain || 'not_found' + rescue Mail::Field::IncompleteParseError + 'not_found' + end end diff --git a/lib/tasks/verify_email.rake b/lib/tasks/verify_email.rake index da94e7edb..c97a8e39b 100644 --- a/lib/tasks/verify_email.rake +++ b/lib/tasks/verify_email.rake @@ -3,9 +3,12 @@ namespace :verify_email do task all_domains: :environment do verifications_by_domain = EmailAddressVerification.not_verified_recently.group_by(&:domain) - verifications_by_domain.each do |_domain, verifications| + verifications_by_domain.each do |domain, verifications| + next if domain == 'not_found' + ver = verifications[0] # Only first email to not to clog the SMTP servers VerifyEmailsJob.enqueue(ver.id) + # VerifyEmailsJob.run(ver.id) end end end