Rails - 验证控制器中的电子邮件列表

时间:2010-12-16 05:41:17

标签: ruby-on-rails devise ruby-on-rails-3

我正在尝试创建一个表单,用户可以使用Devise Invitable输入电子邮件列表以发送邀请。

这是我的控制器,它使用有效的电子邮件:

def create

  params[:user][:email].split(/, ?/).each do |email|
    params[resource_name][:email] = email
    self.resource = resource_class.invite!(params[resource_name].merge(:invited_by => current_user.instance_id))
  end

  respond_to do |format|
    if resource.errors.empty?
      format.js { render :template => 'devise/invitations/create' }
    else
      format.js { render 'devise/invitations/errors', :notice => resource.errors }
    end
  end
end

循环浏览所有电子邮件时的最终目标。执行以下操作:

  1. 在邮件服务器上排队前确认电子邮件有效
  2. 保留所有无效电子邮件的列表,以便我们可以让用户知道并让他们有机会修复并重新提交
  3. 有关如何在存储要发回的无效记录时执行此类电子邮件验证的建议?

    由于

1 个答案:

答案 0 :(得分:2)

这是我几个月前编写的一小段代码,用于验证电子邮件列表(逗号分隔)并过滤电子邮件列表并将无效电子邮件与有效电子邮件分开。此代码使用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.