我们正在使用这样的 ActionMailer 拦截器:

class MailerInterceptor
  def self.delivering_email(message)
    p 1
    if message.to.include?("[email protected]")
      p 2
      message.perform_deliveries = false
    end
  end
end

Mailer.register_interceptor(MailerInterceptor)

但它似乎并没有阻止在生产或我们的测试中向该地址发送消息:
require 'spec_helper'

describe "MailerInterceptor" do
  it "should block sending to certain addresses" do
    expect{ Mailer.user_alert("test1", "[email protected]").deliver }.to change{ ActionMailer::Base.deliveries.count }.by(1)
    expect{ Mailer.user_alert("test2", "[email protected]").deliver }.to_not change{ ActionMailer::Base.deliveries.count }
  end
end

这是 Rails 3.2.14。

它在测试的第二行打印“2”,但仍会发送电子邮件。有任何想法吗?谢谢!

最佳答案

请检查您是否使用 ActionMailer #delivery 方法而不是 #delivery! 因为第二个跳过检查 perform_deliveries。

关于ruby-on-rails - mail.perform_deliveries = false 在 ActionMailer 拦截器中不起作用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18737469/

10-10 14:58