从设计发送延迟电子邮件 [英] Sending delayed email from devise
本文介绍了从设计发送延迟电子邮件的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
delayed_job发送所有电子邮件?
解决方案
或者,而不是使用Delayed :: Mailer gem,您可以很容易地实现和使用自己的ActionMailer传递方法,一个...
- 拦截来自ActionMailer的邮件传递
- 将电子邮件存储在表(可选)
- 创建一个引用存储的电子邮件的Delayed :: Job;
- 延迟工作执行
按照以下方式执行某些操作:
<$ p $在config / application.rb中$ p
ActionMailer :: Base.add_delivery_method:Queued,Mail :: QueuedDelivery
#在config / environment.rb(或一个的config / environments / * .rb文件)
config.action_mailer.delivery_method =:queued#ie。 Mail :: QueuedDelivery
#在lib / mail / queued_delivery.rb
模块邮件
类QueuedDelivery
def initialize(values = {})
#(可选)
end
def deliver!(mail)
email = Email.create!(:delivery_handler => mail.delivery_handler.name,:message = mail.to_s)
延迟:: Job.enqueue工作::电子邮件:: DeliverEmail.new(email.id)
end
结束#class QueueDelivery
end#module Mail
需要实现的Delayed :: Job然后...
- 从数据库中检索存储的电子邮件 -
email = :: Email.find_by_id(email_id)
- 通过邮件gem发送电子邮件 -
Mail :: Message.new(email.message).deliver
/ li>
这是...希望这个帮助!
Is there a simple way of telling Devise to send all email via delayed_job?
解决方案
Alternatively, instead of using the Delayed::Mailer gem, you can quite easily implement and use your own ActionMailer "delivery method", one that...
- intercepts mail delivery from ActionMailer
- stores the email in a table (optional)
- creates a Delayed::Job that references the stored email
- delivers the stored email when the delayed job is executed
Do something along the lines of:
# in config/application.rb
ActionMailer::Base.add_delivery_method :queued, Mail::QueuedDelivery
# in config/environment.rb (or one of the config/environments/*.rb files)
config.action_mailer.delivery_method = :queued # ie. Mail::QueuedDelivery
# in lib/mail/queued_delivery.rb
module Mail
class QueuedDelivery
def initialize(values = {})
# (optional)
end
def deliver!(mail)
email = Email.create!(:delivery_handler => mail.delivery_handler.name, :message => mail.to_s)
Delayed::Job.enqueue Jobs::Email::DeliverEmail.new(email.id)
end
end # class QueueDelivery
end # module Mail
The Delayed::Job you need to implement would then...
- retrieve the stored email from the database --
email = ::Email.find_by_id(email_id)
- deliver the email via the mail gem --
Mail::Message.new(email.message).deliver
That's it... hope this help!
这篇关于从设计发送延迟电子邮件的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文