/script/fixes/084_fix_invalid_emails.rb

https://github.com/r888888888/danbooru · Ruby · 99 lines · 62 code · 19 blank · 18 comment · 0 complexity · f6bb7985c26564c99bfef9797cf486cf MD5 · raw file

  1. #!/usr/bin/env ruby
  2. require_relative "base"
  3. def fix(email, regex, replacement)
  4. email.update!(address: email.address.gsub(regex, replacement))
  5. puts ({ old: email.address_before_last_save, new: email.address }).to_json
  6. rescue StandardError => e
  7. puts ({ old: email.address_was, new: email.address, error: e }).to_json
  8. email.reload.update_attribute(:is_deliverable, false)
  9. end
  10. with_confirmation do
  11. # `foo@gmail.com `
  12. EmailAddress.where("address ~ '[[:space:]]'").find_each do |email|
  13. fix(email, /[[:space:]]/, "")
  14. end
  15. # foo@gmail,com foo@rambler,ru
  16. EmailAddress.where("address ~ '@[a-z]+,[a-z]+$'").find_each do |email|
  17. fix(email, /@([a-z]+),([a-z]+)$/, '@\1.\2')
  18. end
  19. # foo@gmail.com, foo@gmail.com/
  20. EmailAddress.where("address ~ '\\.com.$'").find_each do |email|
  21. fix(email, /\.com.$/, ".com")
  22. end
  23. # foo@gmail.co,
  24. EmailAddress.where("address ~ '\\.co[^m]$'").find_each do |email|
  25. fix(email, /\.co[^m]$/, ".com")
  26. end
  27. # fooqq@.com
  28. EmailAddress.where("address ~ 'qq@\\.com$'").find_each do |email|
  29. fix(email, /qq@\.com$/, "@qq.com")
  30. end
  31. # fooaol@.com
  32. EmailAddress.where("address ~ 'aol@\\.com$'").find_each do |email|
  33. fix(email, /aol@\.com$/, "@aol.com")
  34. end
  35. # foo@qqcom
  36. EmailAddress.where("address ~ '@qqcom$'").find_each do |email|
  37. fix(email, /@qqcom$/, "@qq.com")
  38. end
  39. # foo@gmail foo@yahoo foo@yandex
  40. EmailAddress.where("address ~ '@(gmail|yahoo|yandex|icloud|naver|hotmail|outlook)$'").find_each do |email|
  41. fix(email, /@(gmail|yahoo|yandex|icloud|naver|hotmail|outlook)$/, '@\1.com')
  42. end
  43. # foo@gmail. foo@gmail,
  44. EmailAddress.where("address ~ '@[a-z]+[.,]$'").find_each do |email|
  45. fix(email, /@([a-z]+)[.,]$/, '@\1.com')
  46. end
  47. # mailto:foo@gmail.com
  48. EmailAddress.where("address ~ '^mailto:'").find_each do |email|
  49. fix(email, /^mailto:/, "")
  50. end
  51. # foo@gmailcom foo@hotmailcom
  52. EmailAddress.where("address ~ '@[a-z]+com$'").find_each do |email|
  53. fix(email, /@([a-z]+)com$/, '@\1.com')
  54. end
  55. # foo@gmail.com@gmail.com foo@live.com@hotmail.com
  56. EmailAddress.where("address ~ '@[a-z]+\\.com@[a-z]+\\.com$'").find_each do |email|
  57. fix(email, /@([a-z]+)\.com@([a-z]+)\.com$/, '@\2.com')
  58. end
  59. # foo@g,ail.com
  60. EmailAddress.where("address ~ '@g[^m]ail\\.com$'").find_each do |email|
  61. fix(email, /@g[^m]ail\.com$/, "@gmail.com")
  62. end
  63. # foo@gamil.com
  64. EmailAddress.where("address ~ '@gamil\\.com$'").find_each do |email|
  65. fix(email, /@gamil\.com$/, "@gmail.com")
  66. end
  67. # foo@gmai;.com
  68. EmailAddress.where("address ~ '@gmai[^l]\\.com$'").find_each do |email|
  69. fix(email, /@gmai[^l]\.com$/, "@gmail.com")
  70. end
  71. # foo@gmail@com
  72. EmailAddress.where("address ~ '@gmail[^.]com$'").find_each do |email|
  73. fix(email, /@gmail[^.]com$/, "@gmail.com")
  74. end
  75. # Mark all other invalid emails as undeliverable.
  76. 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|
  77. email.update_attribute(:is_deliverable, false)
  78. puts ({ address: email.address, is_deliverable: false }).to_json
  79. end
  80. end