Sending delayed email from devise

1494 단어 email
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

  • 좋은 웹페이지 즐겨찾기