Rails - проверка списка писем в контроллере - PullRequest
1 голос
/ 16 декабря 2010

Я пытаюсь создать форму, в которой пользователь может ввести список электронных писем для рассылки приглашений с помощью 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. Храните список всех недействительных писем, чтобы мы могли сообщить пользователю об этом и дать ему возможность исправить и повторно отправить

Предложения о том, как выполнить этот тип проверки электронной почты при сохранении любых недействительных записей для отправки обратно?

Спасибо

1 Ответ

2 голосов
/ 16 декабря 2010

Вот небольшой фрагмент кода, который я написал пару месяцев назад, чтобы проверить список электронных писем (через запятую), отфильтровать список электронных писем и отделить недействительные электронные письма от действительных.Этот код протестирован с использованием 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.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...