Вот небольшой фрагмент кода, который я написал пару месяцев назад, чтобы проверить список электронных писем (через запятую), отфильтровать список электронных писем и отделить недействительные электронные письма от действительных.Этот код протестирован с использованием rspec
def parse_emails(emails)
valid_emails, invalid_emails = [], []
unless emails.nil?
emails.split(/,|\n/).each do |full_email|
unless full_email.blank?
if full_email.index(/\<.+\>/)
email = full_email.match(/\<.*\>/)[0].gsub(/[\<\>]/, "").strip
else
email = full_email.strip
end
email = email.delete("<").delete(">")
email_address = ValidatesEmailVeracityOf::EmailAddress.new(email)
if email_address.pattern_is_valid?
valid_emails << email
else
invalid_emails << email
end
end
end
end
return valid_emails, invalid_emails
end
Не стесняйтесь рефакторинг этого.
Я использую плагин validates_email_veracity_of, который немного облегчает эту работу и повышает эффективность проверки.Добавьте эту строку в верхней части вашей модели
validates_email_veracity_of :email_address, :domain_check => false,
:message => 'is invalid for one of your invitations. Please review what you have entered.',
:timeout => 1 # => Time in seconds.