Rails每天都会向用户发送邮件

时间:2015-07-03 11:56:49

标签: ruby-on-rails ruby cron actionmailer

我试图在宝石时使用(或者可能有更好的解决方案?) 我一直在尝试做这项工作,但我不确定我是否做得对。

这是我的日程表.rb:

every :day, :at => '12pm' do # Use any day of the week or :weekend, :weekday
  runner "UserMailer.daily_mail"
end

我的UserMailer:

def daily_mail(user)
    @user = user
    mail to: user.email, subject: "Mail journalier"
end

在我的user.rb中:

  def send_daily_mail
    UserMailer.daily_mail(self).deliver
  end

问题是,我已经在我的项目中激活了邮件,这是有效的(我可以在heroku中测试它)。应用程序在创建帐户时发送邮件,因此在UserController中有:

    def create
      @user = User.new(user_params)
      if @user.save
        @user.send_activation_email
        flash[:info] = "Veuillez contrôler votre boîte mail pour activer votre compte."
        redirect_to root_url
      else
        render 'new'
      end
    end

但是在这里,它会在动作后发送电子邮件。但是,如果我希望随时发送邮件,还有什么可以使邮件发挥作用,以及我如何测试它,因为我没有投入生产(我认为无论什么时候都不能使用heroku )?

最终游戏将是在用户首选项中设置一个复选框,他可以检查每日,每周或每月更新,并相应地发送邮件。

由于

1 个答案:

答案 0 :(得分:2)

您应该创建一个rake任务,例如:

desc "Send email to users"

task :email_sender => :environment do |_, args|
  User.find_each do |user|
    UserMailer.daily_mail(user).deliver if <YOUR_LOGIC_TO_CHECK_IF_YOU_NEED_TO_SEND_EMAIL>
  end
end

config/schedule.rb

every :day, :at => '12pm' do
  rake "email_sender"
end