В качестве альтернативы, вместо использования гема Delayed :: Mailer, вы можете довольно легко реализовать и использовать собственный метод доставки 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
Задержка :: Задание, которое вам нужно реализовать, затем ...
- восстановить сохраненную электронную почту из базы данных -
email = ::Email.find_by_id(email_id)
- доставить электронную почту с помощью почтового самоцвета -
Mail::Message.new(email.message).deliver
Вот и все ... надеюсь, это поможет!