gpt4 book ai didi

ruby-on-rails - 尝试避免在电子邮件地址以 ".old"结尾时发送电子邮件

转载 作者:行者123 更新时间:2023-12-04 14:17:22 25 4
gpt4 key购买 nike

我需要覆盖 ActionMailer 的 mail方法。这个方法是 protected ,所以在子类中,我也定义了 mail protected 方法:

protected

def mail(headers={}, &block)
#add a check to avoid sending emails that end with ".old"
unless headers[:to] =~ /\.old$/
super(headers, &block)
end
end

这样,当外发电子邮件地址以 .old 结尾时,该方法应该返回 nil 并且不发送电子邮件。

然而,在我的单元测试中,似乎一封电子邮件仍然是去 ActionMailer::Base.deliveries
这是我的单元测试:
describe 'BaseNotifier' do

class TestNotifier < BaseNotifier
def mailer(to, from, subject)
mail(:to => to,
:from => from,
:subject => subject)
end
end

before(:each) do
ActionMailer::Base.delivery_method = :test
ActionMailer::Base.perform_deliveries = true
ActionMailer::Base.deliveries.clear
end

it "should not send emails to a user with an email that ends in '.old'" do
TestNotifier.mailer("some_email@gmail.com.old", "from@gmail.com", "test email").deliver
puts "what do we have here " + ActionMailer::Base.deliveries.first.to_s
ActionMailer::Base.deliveries.length.should == 0
end
end

我创建了一个测试类并子类化了邮件被覆盖的类(这就是它在系统中的使用方式)。然后我发送电子邮件并调用 .deliver方法。

更新:我认为交付方法不是问题。当我这样做时: puts TestNotifier.mailer("some_email@gmail.com.old", "from@gmail.com", "test email")我收到与下面相同的电子邮件。我还尝试以这种方式覆盖邮件方法:
def mail(headers={}, &block)
#add a check to avoid sending emails that end with ".old"
unless headers[:to] =~ /\.old$/
super(headers, &block)
else
super({:to=>nil, :from=>nil, :boundary =>nil, :date => nil, :message =>nil, :subject =>nil, :mime_version => nil,
:content_type => nil, :charset =>nil, :content_transfer_encoding => nil}, &block)
end

end

这让我失败了 undefined method 'ascii_only?' for nil:NilClass在这条线上: TestNotifier.mailer("some_email@gmail.com.old", "from@gmail.com", "test email").deliver
更新:我也试过用覆盖的 mail 来做这件事方法:

#创建一个类,该类覆盖了交付方法,什么也不做。
类 NonSendingEmail; def 交付;结尾;结尾

def 邮件(headers={}, &block)
#添加检查以避免发送以“.old”结尾的电子邮件
除非 headers[:to] =~/.old$/
super (标题,&块)
别的
非发送电子邮件.new
结尾
结尾

但我仍然有同样的结果。

好像是 deliver方法是生成空电子邮件?我想做的是根本没有生成任何东西。这是来自 delivery 数组的电子邮件:
Date: Thu, 19 Jan 2012 00:00:00 +0000
Message-ID: <4f18344f94d0_12267803589ac2731d@Ramys-MacBook-Pro.local.mail>
Mime-Version: 1.0
Content-Type: text/plain
Content-Transfer-Encoding: 7bit

最佳答案

你正在编辑错误的地方。将邮件方法更改为返回 nil 将无济于事,因为邮件程序然后使用空消息。您可以改为修补邮件类(使用 rails 3):

module Mail
class Message
alias :old_deliver :deliver
def deliver
old_deliver unless to.first =~ /\.old$/
end
end
end

关于ruby-on-rails - 尝试避免在电子邮件地址以 ".old"结尾时发送电子邮件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8928836/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com