From ab4214dc00f4dc2630425fa6588ead403dbea37b Mon Sep 17 00:00:00 2001 From: evazion Date: Sun, 9 Jan 2022 13:24:53 -0600 Subject: [PATCH] emails: mark all invalid emails as undeliverable. --- script/fixes/084_fix_invalid_emails.rb | 20 ++++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) diff --git a/script/fixes/084_fix_invalid_emails.rb b/script/fixes/084_fix_invalid_emails.rb index e1d44ed51..95a240c94 100755 --- a/script/fixes/084_fix_invalid_emails.rb +++ b/script/fixes/084_fix_invalid_emails.rb @@ -1,6 +1,6 @@ #!/usr/bin/env ruby -require_relative "../../config/environment" +require_relative "base" def fix(email, regex, replacement) email.update!(address: email.address.gsub(regex, replacement)) @@ -10,7 +10,7 @@ rescue StandardError => e email.reload.update_attribute(:is_deliverable, false) end -EmailAddress.transaction do +with_confirmation do # `foo@gmail.com ` EmailAddress.where("address ~ '[[:space:]]'").find_each do |email| fix(email, /[[:space:]]/, "") @@ -76,16 +76,24 @@ EmailAddress.transaction do fix(email, /@g[^m]ail\.com$/, "@gmail.com") end + # foo@gamil.com + EmailAddress.where("address ~ '@gamil\\.com$'").find_each do |email| + fix(email, /@gamil\.com$/, "@gmail.com") + end + # foo@gmai;.com EmailAddress.where("address ~ '@gmai[^l]\\.com$'").find_each do |email| fix(email, /@gmai[^l]\.com$/, "@gmail.com") end # foo@gmail@com - EmailAddress.where("address ~ 'gmail[^.]com$'").find_each do |email| - fix(email, /gmail[^.]com$/, "@gmail.com") + EmailAddress.where("address ~ '@gmail[^.]com$'").find_each do |email| + fix(email, /@gmail[^.]com$/, "@gmail.com") end - print "Commit? (yes/no): " - raise "abort" unless STDIN.readline.chomp == "yes" + # Mark all other invalid emails as undeliverable. + EmailAddress.where(is_deliverable: true).where("address !~ '^[a-zA-Z0-9._%+-]+@([a-zA-Z0-9][a-zA-Z0-9-]{0,61}\\.)+[a-zA-Z]{2,}$'").find_each do |email| + email.update_attribute(:is_deliverable, false) + puts ({ address: email.address, is_deliverable: false }).to_json + end end