emails: automatically fix typos in email addresses.

Try to automatically fix various kind of typos and common mistakes in
email addresses when a user creates a new account. It's common for users
to signup with addresses like `name@gmai.com`, which leads to bounces
when we try to send the welcome email.
This commit is contained in:
evazion
2022-10-14 18:38:15 -05:00
parent 4dc1a109c5
commit edc7e52353
6 changed files with 187 additions and 19 deletions

View File

@@ -12,29 +12,32 @@ class EmailAddressTest < ActiveSupport::TestCase
should allow_value("foo+bar@gmail.com").for(:address)
should allow_value("foo@foo.bar.com").for(:address)
should_not allow_value("foo@gmail.com ").for(:address)
should_not allow_value(" foo@gmail.com").for(:address)
should_not allow_value("foo@-gmail.com").for(:address)
should_not allow_value("foo@.gmail.com").for(:address)
should_not allow_value("foo@gmail").for(:address)
should_not allow_value("foo@gmail.").for(:address)
should_not allow_value("foo@gmail,com").for(:address)
should_not allow_value("foo@gmail.com.").for(:address)
should_not allow_value("foo@gmail.co,").for(:address)
should_not allow_value("foo@example").for(:address)
should_not allow_value("fooqq@.com").for(:address)
should_not allow_value("foo@gmail..com").for(:address)
should_not allow_value("foo@gmailcom").for(:address)
should_not allow_value("mailto:foo@gmail.com").for(:address)
should_not allow_value('foo"bar"@gmail.com').for(:address)
should_not allow_value('foo<bar>@gmail.com').for(:address)
should_not allow_value("foo@gmail.com@gmail.com").for(:address)
should_not allow_value("foo@g,ail.com").for(:address)
should_not allow_value("foo@gmai;.com").for(:address)
should_not allow_value("foo@gmail@com").for(:address)
should_not allow_value("foo@gmail.c").for(:address)
should_not allow_value("foo@foo.-bar.com").for(:address)
should_not allow_value("foo@127.0.0.1").for(:address)
should_not allow_value("foo@localhost").for(:address)
end
should "fix typos" do
assert_equal("foo@gmail.com", EmailAddress.new(address: "foo@gmail.com ").address.to_s)
assert_equal("foo@gmail.com", EmailAddress.new(address: " foo@gmail.com").address.to_s)
assert_equal("foo@gmail.com", EmailAddress.new(address: "foo@gmail.com\n").address.to_s)
assert_equal("foo@gmail.com", EmailAddress.new(address: "foo@-gmail.com").address.to_s)
assert_equal("foo@gmail.com", EmailAddress.new(address: "foo@.gmail.com").address.to_s)
assert_equal("foo@gmail.com", EmailAddress.new(address: "foo@gmail").address.to_s)
assert_equal("foo@gmail.com", EmailAddress.new(address: "foo@gmail,com").address.to_s)
assert_equal("foo@gmail.com", EmailAddress.new(address: "foo@gmail.com.").address.to_s)
assert_equal("foo@gmail.com", EmailAddress.new(address: "foo@gmail.co,").address.to_s)
assert_equal("foo@gmail.com", EmailAddress.new(address: "foo@gmail..com").address.to_s)
assert_equal("foo@gmail.com", EmailAddress.new(address: "foo@gmailcom").address.to_s)
assert_equal("foo@gmail.com", EmailAddress.new(address: "mailto:foo@gmail.com").address.to_s)
assert_equal("foo@gmail.com", EmailAddress.new(address: "foo@gmail.com@gmail.com").address.to_s)
assert_equal("foo@gmail.com", EmailAddress.new(address: "foo@g,ail.com").address.to_s)
assert_equal("foo@gmail.com", EmailAddress.new(address: "foo@gmai;.com").address.to_s)
assert_equal("foo@gmail.com", EmailAddress.new(address: "foo@gmail@com").address.to_s)
end
end
end