ruby-on-rails – ActionMailer渲染一次,发送多次?
发布时间:2020-12-17 02:11:21 所属栏目:百科 来源:网络整理
导读:我试图弄清楚是否可以使用没有Rails的ActionMailer来渲染一次html.erb视图,然后使用不同的电子邮件多次发送出去:to? 注意:我没有使用完整的Rails堆栈,只是ActionMailer 所以在邮件类中 class MyMailer ActionMailer::Base default :from = 'johndoe@examp
我试图弄清楚是否可以使用没有Rails的ActionMailer来渲染一次html.erb视图,然后使用不同的电子邮件多次发送出去:to?
注意:我没有使用完整的Rails堆栈,只是ActionMailer 所以在邮件类中 class MyMailer < ActionMailer::Base default :from => 'johndoe@example.com',:subject => 'New Arrivals!' def new_products(customer,new_products) @new_products = new_products mail :to => customer.email do |format| format.html end end end 然后,在客户端代码中,我们需要获得新产品和客户. products = Product.new_since_yesterday customers = Customer.all customers.each do |c| MyMailer.new_products(c,products).deliver end 假设这是每天发送一次,所以我们只想获得自上次发送电子邮件以来的新产品.我们只想渲染一次,因为今天的新产品不会在电子邮件之间发生变化.据我所知,这将在每次创建和发送电子邮件时调用渲染. 有没有办法告诉ActionMailer只渲染一次,然后以某种方式引用包含渲染视图的对象.这将减少渲染执行它所需的所有时间.发送到的电子邮件地址会发生变化,但电子邮件的内容不会发生变化. 显然,对于大量电子邮件,您不会简单地遍历列表并创建/发送电子邮件.您可以使用队列.一般来说,当没有必要多次生成渲染步骤时,你会怎么做一次并将结果用于所有电子邮件? 可能我对ActionMailer的不熟悉让我失望了. 解决方法
我没有试过这个,但是对邮件程序的调用只返回一个普通的Mail :: Message对象,包含一个正文.所以你应该能够抓住身体并重新使用它.
message = MyMailer.new_products(c,products) message_body = message.body customers.each do |c| mail = Mail.new do from 'yoursite@sample.com' to c.email subject 'this is an email' body message_body end mail.deliver end 您甚至可以通过复制邮件来提高效率 message = MyMailer.new_products(c,products) customers.each do |c| mail = message.dupe() mail.to = c.email mail.deliver end (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |