ruby-on-rails - rails 3 : how to abort delivery method in actionmailer?

标签 ruby-on-rails actionmailer

在我的邮件 Controller 中,在某些情况下(缺少数据),我们会中止发送电子邮件。

在这种情况下,如何退出 Controller 方法而不渲染 View ?

return if @some_email_data.nil?



由于 View 仍在呈现,因此没有解决问题(除非我添加了很多 nil 检查,否则在我尝试使用 @some_email_data 的每个地方都会抛出错误)

即使我做了零检查,它也会提示没有“发件人”(因为我应该在到达我设置发件人和主题的行之前做了一个“返回”。
render ... return也不行

基本上,RETURN 不会在邮件方法中返回!

最佳答案

我刚刚在这里遇到了同样的事情。

我的解决方案如下:

module BulletproofMailer
  class BlackholeMailMessage < Mail::Message
    def self.deliver
      false
    end
  end

  class AbortDeliveryError < StandardError
  end

  class Base < ActionMailer::Base

    def abort_delivery
      raise AbortDeliveryError
    end

    def process(*args)
      begin
        super *args
      rescue AbortDeliveryError
        self.message = BulletproofMailer::BlackholeMailMessage
      end
    end
  end
end

使用这些包装邮件程序看起来像这样:
class EventMailer < BulletproofMailer::Base
  include Resque::Mailer
  def event_created(event_id)
    begin
      @event = CalendarEvent.find(event_id)
    rescue ActiveRecord::RecordNotFound
      abort_delivery
    end
  end
end

也是posted在我的博客中。

关于ruby-on-rails - rails 3 : how to abort delivery method in actionmailer?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6550809/

相关文章:

ruby-on-rails - Devise/ActionMailer 发送重复电子邮件以进行注册确认

ruby-on-rails - Rails ActionMailer w/Devise + Google Apps 处于开发模式

javascript - Ruby on Rails 4 : How to include Javascript files in Rails web application?

ruby-on-rails - ActionMailer Rails : invitation_email. html.erb 文件未读取

ruby-on-rails - Rails 4 Net::SMTPSyntaxError: 501 批量电子邮件的语法错误

ruby-on-rails - `execute <<-SQL` 在 Rails 中是什么意思?

configuration - ActionMailer 设置在开发和生产之间存在错误差异

ruby-on-rails - 如何将 has_one 关联限制为单个记录

ruby-on-rails - 创建新对象时获取 ActionController::UnknownFormat、rspec 测试

ruby-on-rails - Rails 3 中的多态关联