使用 rake 任务时检查电子邮件是不是发送一次的最佳方法是啥?
Posted
技术标签:
【中文标题】使用 rake 任务时检查电子邮件是不是发送一次的最佳方法是啥?【英文标题】:How is the best way to check if email was sent once when using rake task?使用 rake 任务时检查电子邮件是否发送一次的最佳方法是什么? 【发布时间】:2012-12-12 06:11:44 【问题描述】:我有一个简单的邮件程序,它向用户发送每周摘要和 rake 任务,它向所有用户发送这封电子邮件,并且它被固定到 heroku 调度程序。
我想每周向用户发送这封电子邮件,但每周只发送一次,无论我运行多少次rake send_weekly_digest
邮递员
class DigestMailer < ActionMailer::Base
include Resque::Mailer
default from: "company@email.com"
def weekly_digest(user_id)
@user = User.find(user_id)
mail :to => @user.email, :subject => "Weekly Digest"
end
end
Rake 任务
desc "Send weekly email digest"
task send_weekly_digest: :environment do
User.all.each do |user|
DigestMailer.weekly_digest(user.id).deliver
end
end
【问题讨论】:
【参考方案1】:在您的用户表中添加一个名为 last_emailed_at 或类似名称的列,然后在您发送每周摘要时使用时间戳更新该列。
然后在你的 rake 任务中而不是说 User.all,只获取上周未通过电子邮件发送的用户:
User.where("last_emailed_at < ?", 1.week.ago)
【讨论】:
那么我应该在mail :to => @user.email, :subject => "Weekly Digest"
下方添加@user.last_emailed_at.touch
到DigestMailer
吗?有没有办法确保邮件真的送达了?
控制器中的顺序应该无关紧要,因为在调用交付之前不会发送电子邮件,所以我将它放在邮件之前:to => ...我不确定你的第二个问题。您必须相信 Rail 的交付方法会发送电子邮件。您可以在用户电子邮件上添加验证以检查无效的电子邮件:hello#ok,com,或编写 rake 任务的一些测试以确保它正确发送电子邮件。以上是关于使用 rake 任务时检查电子邮件是不是发送一次的最佳方法是啥?的主要内容,如果未能解决你的问题,请参考以下文章