首页 > 解决方案 > rake 任务上的 ActionMailer 循环每次运行时都会发送一封额外的邮件

问题描述

我想不通,我有这门课

class UserMailer < ActionMailer::Base
 def apps_remainder_email()
    #apps array ..which basically have 3 records in it
    apps.each do |rec||
    mail(to:  user.email, subject: 'Apps Remainder').deliver
    end
 end
end

当我尝试在 Rails 控制台中调用上述内容时,UserMailer.apps_remainder_email它工作正常并发送了三封电子邮件,但是当我将其添加为 rake 任务时,它会发送四封而不是三封,即始终是最终电子邮件的副本。

这是我的 rake 任务

task daily: [:environment] do  
 UserMailer.apps_remainder_email.deliver
end

我认为这是因为我的任务中有一个 .deliver ,但没有那个 .deliver 根本就没有邮件发送。

  $ rake daily --trace
    ** Invoke daily (first_time)
    ** Invoke environment (first_time)
    ** Execute environment
    ** Execute daily

标签: ruby-on-railsrakeactionmailer

解决方案


你的UserMailer班级不应该自己打电话deliver

相反,您的 rake 任务应该调用deliver.

因此deliver,从UserMailer类中删除并将逻辑放入您的 rake 任务中:

task daily: [:environment] do  
   apps.each do |rec||
      UserMailer.apps_remainder_email(rec).deliver
   end
end

推荐阅读