Rails 3 - 放弃在ActionMailer操作中发送邮件

tam*_*ama 14 ruby-on-rails actionmailer ruby-on-rails-3

我想知道如何有条件地放弃在动作ActionMailer动作中发送邮件.


class SomeMailer < ActionMailer::Base
  ...

  def some_emails
    some_models = Model.where(:a => 1)
    if !some_models.blank?
      mail(...)
    else
      # What to add here?
      # render :nothing => true doesn't work
    end
  end

end

现在调用它SomeMailer.some_emails.deliver!返回一个 ArgumentError: A sender (Return-Path, Sender or From) required to send a message

小智 42

将perform_deliveries设置为false,如下所示:

emails = get_email_list_somehow
if emails.present?
  mail options.merge(:bcc => emails)
else
  self.message.perform_deliveries = false
end
Run Code Online (Sandbox Code Playgroud)

这将悄然不会尝试发送,应该停止发生错误.

  • 如果您的项目无法重构以决定在Mailer类之外发送电子邮件(例如,延迟作业,cron作业等),则此解决方案可用. (3认同)
  • 我同意 - 这是一个更好的解决方案.保持干燥并在一个地方进行检查. (2认同)

小智 -1

相反,请将您的条件放在您调用 SomeMailer.some_emails.deliver 的位置!