Actionmailer验证发送的最大电子邮件数

时间:2015-11-26 11:42:35

标签: ruby-on-rails ruby-on-rails-4 actionmailer

我希望用户每天能够发送不超过5封电子邮件。有可能验证吗?

user_mailer.rb

class UserMailer < ActionMailer::Base
  def contact_email(from_email, body, to_email)
     @body = body

     @user = User.find_by(email: to_email)
     mail(from: from_email, to: to_email, subject: '', cc: from_email)
  end
end

users_controller.rb

def send_mail
  @user = User.find(params[:id])
  @body = params[:message]

  UserMailer.contact_email(current_user.email, @body, @user.email).deliver_now
end

1 个答案:

答案 0 :(得分:1)

您可以使用SentMailuser_id创建模型created_at

修改您的User模型以包含has_many :sent_mails

然后按如下方式修改send_mail方法。

def send_mail
  @user = User.find(params[:id])
  @body = params[:message]
  if @user.sent_mails.last_day.count < 5
    UserMailer.contact_email(current_user.email, @body, @user.email).deliver_now
    @user.sent_mails.create
  end
end

在您的SentMail模型中,创建一个范围last_day,用于创建以下查询where(created_at: 24.hours.ago..DateTime.now.utc)

SentMail模型也是跟踪发送的电子邮件的好方法,如果您想要存储,交付,点击等电子邮件的状态,那么这种模式会很好。