从设备发送延迟的电子邮件 [英] Sending delayed email from devise

查看:21
本文介绍了从设备发送延迟的电子邮件的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

是否有一种简单的方法可以告诉 Devise 通过以下方式发送所有电子邮件延迟工作?

Is there a simple way of telling Devise to send all email via delayed_job?

推荐答案

或者,您可以非常轻松地实现和使用您自己的 ActionMailer交付方法",而不是使用 Delayed::Mailer gem,该方法...

Alternatively, instead of using the Delayed::Mailer gem, you can quite easily implement and use your own ActionMailer "delivery method", one that...

  1. 拦截来自 ActionMailer 的邮件发送
  2. 将电子邮件存储在表格中(可选)
  3. 创建一个 Delayed::Job 引用存储的电子邮件
  4. 在执行延迟作业时发送存储的电子邮件

按照以下方式做一些事情:

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

您需要实施的 Delayed::Job 那么...

The Delayed::Job you need to implement would then...

  1. 从数据库中检索存储的电子邮件 -- email = ::Email.find_by_id(email_id)
  2. 通过邮件 gem 发送电子邮件 -- Mail::Message.new(email.message).deliver

就是这样……希望对您有所帮助!

That's it... hope this help!

这篇关于从设备发送延迟的电子邮件的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆