Add punycode email support

This commit is contained in:
Alex Sherman 2021-06-30 14:16:50 +05:00
parent c344b91d84
commit 550c5abd6c
4 changed files with 45 additions and 4 deletions

View file

@ -0,0 +1,33 @@
module EmailAddressConverter
module_function
def punycode_to_unicode(email)
return email if domain(email) == 'not_found'
local = local(email)
domain = SimpleIDN.to_unicode(domain(email))
"#{local}@#{domain}"&.downcase
end
def unicode_to_punycode(email)
return email if domain(email) == 'not_found'
local = local(email)
domain = SimpleIDN.to_ascii(domain(email))
"#{local}@#{domain}"&.downcase
end
private
def domain(email)
Mail::Address.new(email).domain&.downcase || 'not_found'
rescue Mail::Field::IncompleteParseError
'not_found'
end
def local(email)
Mail::Address.new(email).local&.downcase || email
rescue Mail::Field::IncompleteParseError
email
end
end