我将分享我是如何做到的。它工作得很好。
首先,无论何时安装 gem。
你应该有你的邮件。这是我的:
class WeeklyDigestMailer < ApplicationMailer
default :from => "bla@bla.org"
# Subject can be set in your I18n file at config/locales/en.yml
# with the following lookup:
#
# en.weekly_digest_mailer.weekly_promos.subject
#
helper ApplicationHelper
def weekly_promos(suscriptor, promos)
@promos = promos
mail(:to => "<#{suscriptor.email}>", :subject => "Mercadillo digital semanal")
end
end
当然,您需要设置视图样式。
然后,您创建一个 rake 任务(在 lib/tasks 中)。像这样:
desc 'send digest email'
task send_weekly_email: :environment do
@promociones = Promo.where("validez > ?", Time.zone.now).order("created_at DESC")
if (@promociones.count > 0)
@suscriptors = Suscriptor.where(email_confirmation: true)
@suscriptors.each do |suscriptor|
WeeklyDigestMailer.weekly_promos(suscriptor, @promociones).deliver_now
end
end
end
最后,您可以使用everyge gem 配置您的日程安排。因为我想在整个星期四早上 9 点发送邮件,所以我只是说:
every :thursday, at: '9:00 am' do # Use any day of the week or :weekend, :weekday
rake "send_weekly_email"
end
重要的一点:由于您使用的是 rake 任务,因此请使用 Deliver_now 而不是 deliver_later,因为如果任务在所有电子邮件发送之前完成,其余的将无法发送。
就这样。