ruby-on-rails - 从设备发送延迟电子邮件

标签 ruby-on-rails delayed-job devise

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

最佳答案

或者,不使用 Delayed::Mailer gem,您可以很容易地实现和使用您自己的 ActionMailer “传递方法”,一种...

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

  • 按照以下方式做一些事情:
    # 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 那么......
  • 从数据库中检索存储的电子邮件 -- email = ::Email.find_by_id(email_id)
  • 通过邮件 gem 发送电子邮件 -- Mail::Message.new(email.message).deliver

  • 就是这样......希望这有帮助!

    关于ruby-on-rails - 从设备发送延迟电子邮件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3736626/

    相关文章:

    ruby-on-rails - Rails 中的条件语句

    ruby-on-rails - 启动或确保延迟作业在应用程序/服务器重新启动时运行

    ruby-on-rails - Rails 3.0.3 cucumber 测试中不存在关系 "delayed_jobs"

    ruby-on-rails - Rails 测试 - 检查用户是否使用 Devise 登录

    ruby-on-rails - 设计首次使用 Rails 登录

    ruby-on-rails - 从模型中注销设计用户

    ruby-on-rails - 安装 RVM(Ruby 版本管理器)的关键问题

    ruby-on-rails - Ruby on Rails2 : is there a way to minimize css and js when in production mode?

    ruby-on-rails - 在 Ruby 中转义字符串中的双反斜杠和单反斜杠

    ruby-on-rails - 延迟作业 Rake 任务失败