Rails 在不使用密件抄送的情况下循环遍历多个电子邮件收件人的 rake 任务
Rails rake task that loops through multiple email recipients without using bcc
我有一个 Rails rake 任务,我用它来发送电子邮件,我可以让我的 Mailer 发送给多个收件人的唯一方法是在 Mailer 中收集它们,然后将它们列为 bcc这样的收件人:
class SubscribersMailer < ApplicationMailer
def send_daily_updates
@subscribers = Subscriber.all
recipients = @subscribers.collect(&:email).join(",")
@subscribers.each do |subscriber|
mail(to: "***@example.com.com", subject: "Email subject", :bcc => recipients)
end
end
end
在我的任务中,我只是调用这个:
SubscribersMailer.send_daily_updates.deliver_now
当我 运行 rake 任务时,它成功地将电子邮件发送到每个地址,但这似乎不是执行此操作的理想方式。在密件抄送字段中发送大量地址的电子邮件是将其标记为垃圾邮件的好方法。
遍历收件人的更好方法是什么?我应该在 rake 任务中还是在 Mailer 中执行此操作?
我建议你在邮件程序中只使用一个订阅者,并在抽取任务中为每个订阅者调用它。喜欢
class SubscribersMailer < ApplicationMailer
def send_daily_updates(subscriber)
mail(to: subscriber.email, subject: "Email subject")
end
end
Subscriber.find_each do |subscriber|
SubscribersMailer.send_daily_updates(subscriber).deliver_now
end
这将生成一堆电子邮件,但订阅者在收到的信件中只会看到他们的电子邮件地址。这更安全(您不会向每个订阅者公开所有订阅者的电子邮件地址)并且降低它被标记为垃圾邮件的风险。
此外,我建议您使用一些后台工作人员而不是 rake 任务(Sidekiq、Rescue 等)
我有一个 Rails rake 任务,我用它来发送电子邮件,我可以让我的 Mailer 发送给多个收件人的唯一方法是在 Mailer 中收集它们,然后将它们列为 bcc这样的收件人:
class SubscribersMailer < ApplicationMailer
def send_daily_updates
@subscribers = Subscriber.all
recipients = @subscribers.collect(&:email).join(",")
@subscribers.each do |subscriber|
mail(to: "***@example.com.com", subject: "Email subject", :bcc => recipients)
end
end
end
在我的任务中,我只是调用这个:
SubscribersMailer.send_daily_updates.deliver_now
当我 运行 rake 任务时,它成功地将电子邮件发送到每个地址,但这似乎不是执行此操作的理想方式。在密件抄送字段中发送大量地址的电子邮件是将其标记为垃圾邮件的好方法。
遍历收件人的更好方法是什么?我应该在 rake 任务中还是在 Mailer 中执行此操作?
我建议你在邮件程序中只使用一个订阅者,并在抽取任务中为每个订阅者调用它。喜欢
class SubscribersMailer < ApplicationMailer
def send_daily_updates(subscriber)
mail(to: subscriber.email, subject: "Email subject")
end
end
Subscriber.find_each do |subscriber|
SubscribersMailer.send_daily_updates(subscriber).deliver_now
end
这将生成一堆电子邮件,但订阅者在收到的信件中只会看到他们的电子邮件地址。这更安全(您不会向每个订阅者公开所有订阅者的电子邮件地址)并且降低它被标记为垃圾邮件的风险。
此外,我建议您使用一些后台工作人员而不是 rake 任务(Sidekiq、Rescue 等)