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

Ruby on rails Rails-验证控制器中的电子邮件列表,ruby-on-rails,devise,ruby-on-rails-3,Ruby On Rails,Devise,Ruby On Rails 3,我正在尝试创建一个表单,用户可以在其中输入电子邮件列表,使用Desive Invitable发送邀请 这是我的控制器,可处理有效电子邮件: def create params[:user][:email].split(/, ?/).each do |email| params[resource_name][:email] = email self.resource = resource_class.invite!(params[resource_name].merge(:i

我正在尝试创建一个表单,用户可以在其中输入电子邮件列表,使用Desive 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
我的最终目标是浏览所有电子邮件。请执行以下操作:

  • 有效电子邮件在邮件服务器上排队之前是有效的
  • 保留所有无效电子邮件的列表,这样我们就可以让用户知道,并给他们一个修复和重新提交的机会
  • 关于如何在存储任何要发回的无效记录时进行此类电子邮件验证的建议


    谢谢

    这是我几个月前写的一段代码,用于验证电子邮件列表(以逗号分隔),过滤电子邮件列表,并将无效电子邮件与有效电子邮件分开。此代码使用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\u email\u veracity\u of”呢?我之所以将其添加到模型中,是因为我让同一个模型检查来自单独表单的单个电子邮件地址。在您的情况下,这可能是可选的。模式是否有效?根据已知模式验证电子邮件地址的格式是否正确。请注意,它不会验证所有RFC 2822有效地址。def模式是否有效?address=~/\A([^@\s]+)@((?:[-A-z0-9]+\)+[A-z]{2,})\z/i end-如果模式是插件中的有效方法,则这是一个实现,您可以看到该方法只是一个正则表达式,电子邮件地址将根据它进行验证。
    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.