Каков современный уровень проверки электронной почты для Rails? - PullRequest
95 голосов
/ 21 июля 2009

Что вы используете для проверки адресов электронной почты пользователей и почему?

Я использовал validates_email_veracity_of, который фактически запрашивает серверы MX. Но это полно неудач по разным причинам, в основном связанным с сетевым трафиком и надежностью.

Я оглянулся и не смог найти ничего очевидного, что многие люди используют для проверки работоспособности адреса электронной почты. Для этого есть поддерживаемый, достаточно точный плагин или гем?

P.S .: Пожалуйста, не просите меня отправить электронное письмо со ссылкой, чтобы увидеть, работает ли электронное письмо. Я разрабатываю функцию «отправить другу», так что это не практично.

Ответы [ 13 ]

1 голос
/ 20 ноября 2012

Это решение основано на ответах @SFEley и @Alessandro DS, с рефакторингом и разъяснением использования.

Вы можете использовать этот класс валидатора в вашей модели следующим образом:

class MyModel < ActiveRecord::Base
  # ...
  validates :colum, :email => { :allow_nil => true, :message => 'O hai Mark!' }
  # ...
end

Если в вашей папке app/validators (Rails 3) есть следующее:

class EmailValidator < ActiveModel::EachValidator

  def validate_each(record, attribute, value)
    return options[:allow_nil] == true if value.nil?

    unless matches?(value)
      record.errors[attribute] << (options[:message] || 'must be a valid email address')
    end
  end

  def matches?(value)
    return false unless value

    if /\A[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]+\z/.match(value).nil?
      false
    else
      true
    end

  end
end
1 голос
/ 11 января 2012

Почтовый камень имеет встроенный анализатор адресов.

begin
  Mail::Address.new(email)
  #valid
rescue Mail::Field::ParseError => e
  #invalid
end
1 голос
/ 26 июля 2009

Есть в основном 3 наиболее распространенных варианта:

  1. Regexp (нет регулярного адреса электронной почты regexp, так что сверните свой собственный)
  2. MX-запрос (это то, что вы используете)
  3. Создание токена активации и отправка его по почте (restful_authentication way)

Если вы не хотите использовать и validates_email_veracity_of, и генерацию токенов, я бы пошел с проверкой регулярных выражений старой школы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...