我们正在使用这样的ActionMailer拦截器:
class MailerInterceptor
def self.delivering_email(message)
p 1
if message.to.include?("test2@example.com")
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", "test@example.com").deliver }.to change{ ActionMailer::Base.deliveries.count }.by(1)
expect{ Mailer.user_alert("test2", "test2@example.com").deliver }.to_not change{ ActionMailer::Base.deliveries.count }
end
end
这是使用rails 3.2.14。
它打印' 2'在测试的第二行,但仍然发送电子邮件。有任何想法吗?谢谢!
答案 0 :(得分:6)
请检查您是否使用ActionMailer #delivery
方法,而不是#delivery!
,因为第二个方法会跳过检查perform_deliveries。
答案 1 :(得分:0)
您的代码中需要更多详细信息,但我可以提供一些可能对您有用的建议
Mailer.register_interceptor(MailerInterceptor)
应该是
ActionMailer::Base.register_interceptor(MailerInterceptor)
其次你的message.perform_deliveries = false
应该工作,不知道它为什么不起作用
你可以试试
ActionMailer::Base.delivery_method = :test
而不是
message.perform_deliveries = false