Open yoshie902a opened 4 years ago
This gem parses emails using Ragel grammars: https://github.com/mikel/mail/tree/master/lib/mail/parsers
Ragel offers a language to defines grammars and it generates parser code (in Ruby or other languages) based on these grammars.
Here is the grammar for addresses: https://github.com/mikel/mail/blob/master/lib/mail/parsers/address_lists_parser.rl
To leverage the Mail gem’s parser for validating email addresses, you can do something along those lines:
def valid_email_address?(address)
# This may raise if passed an invalid address
mail_address = Mail::Address.new.tap { |a| a.address = address }
# If the above did not raise, it’s still possible that something like
# "this" was passed (no domain), so do some simple checks.
!mail_address.local.nil? && !mail_address.local.empty? &&
!mail_address.domain.nil? && !mail_address.domain.empty?
rescue Mail::Field::FieldError
false
end
Slightly simpler version (using ActiveSupport, so this is basically rails-only):
def valid_email_address(address)
mail_address = Mail::Address.new(address)
mail_address.local.present? && mail_address.domain.present?
rescue Mail::Field::FieldError
false
end
I am looking for a RFC5322 compliant way to validate email addresses. Can this gem do it? If so how and what is the regex it uses?