【问题标题】:Rails send mail to a user every dayRails 每天向用户发送邮件
【发布时间】:2015-09-21 06:22:33
【问题描述】:

我正在尝试使用 gem(或者也许有更好的解决方案?) 我一直在努力完成这项工作,但我不确定我是否做得对。

这是我的 schedule.rb :

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

我的用户邮箱:

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 一起使用)?

最终的结果是在用户偏好中设置一个复选框,他将能够检查每日、每周或每月的更新,并相应地发送邮件。

谢谢

【问题讨论】:

  • 您的脚本`runner "UserMailer.daily_mail"` 没有将用户传递给daily_mail 操作。您能否解释一下您对谁收到电子邮件以及何时收到电子邮件的要求?
  • 我的目标是在用户表中添加一个字段,如果他想接收每日邮件,则为一个简单的布尔值。我希望任务向激活此功能的每个用户发送邮件。

标签: ruby-on-rails ruby cron actionmailer


【解决方案1】:

您应该创建一个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

【讨论】:

  • 我不需要使用 user.rb 吗?对于复选框,我考虑在 User 表中添加字段,并检查 user.daily 是否为 true 或其他内容。这行得通吗?
  • 是的,您需要在表格中添加一个新列来存储所需电子邮件的频率。它会在计算您是否需要在特定的 rake 执行中向用户发送电子邮件时使用。
  • 我会这样做,然后让你知道。每当 gem 在 heroku 中不起作用时,我如何测试此功能是否有效?
  • 我已经添加了复选框,它们工作正常。现在我想测试一下 rake 任务是否适用于 schedule.rb 但我不知道如何
  • 太酷了@Komarzer。让我们为此发布新问题,以便它可以有单独的答案,这也将对其他人有所帮助
猜你喜欢
  • 1970-01-01
  • 2011-10-26
  • 1970-01-01
  • 2016-09-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-12-03
  • 1970-01-01
相关资源
最近更新 更多