我希望系统每周向用户发送电子邮件,具体取决于他们在rails中输入的日期

时间:2012-06-26 08:41:33

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

  

可能重复:
  how to keep sending emails to users every week depending on user date input in rails

我正在构建一个允许用户插入信息名称,日期和电子邮件的系统。我希望系统每隔7天自动向用户发送电子邮件。

这是我的邮件

class UserMailer < ActionMailer::Base
  default from: "from@example.com"
   def welcome_email(dop)
    @dop = dop
    @url  = "http://example.com/login"
    mail(:to => dop.mail, :subject => "Welcome to My Awesome Site")
  end
end

这是控制器:

def create
    @dop = Dop.new(params[:dop])

    respond_to do |format|
      if @dop.save
        UserMailer.welcome_email(@dop).deliver
        format.html { redirect_to @dop, notice: 'Dop was successfully created.' }
        format.json { render json: @dop, status: :created, location: @dop }
      else
        format.html { render action: "new" }
        format.json { render json: @dop.errors, status: :unprocessable_entity }
      end
    end
  end

2 个答案:

答案 0 :(得分:3)

您需要编写一个rake任务并通过cron调用该任务。

例如:

task :send_email => :environment do
  Dop.where('last_email <= ?', 7.days.ago).each do |dop|
    UserMailer.welcome_email(dop).deliver
    dop.update_attribute('last_email', Time.now)
  end
end

现在设置您的计算机Cron调度程序每隔几分钟调用此Rake任务以自动发送电子邮件。

Cron是一个Unix调度程序,它以预定的间隔执行程序。

您需要使用crontab -e编辑crontab文件并输入以下内容:

*/5 * * * *  /bin/bash cd <path_to_your_app> && rake send_email

*/5 * * * *表示您每5分钟运行一次。

答案 1 :(得分:0)

寻找名为whenever

的宝石

它完全符合您的要求。