Я пытался выяснить, как отправлять отложенную почту с помощью delayed_job с rails 3. Я перепробовал почти все комбинации возможных возможностей, которые только мог придумать, — я могу заставить почту работать в фоновом режиме, я просто могу». t заставить его отложить отправку на будущее время. Таблица delayed_jobs в базе данных очищает задачи, в журнале указано «отправлено», обработчик задач delayed_job принимает задачу и сообщает, что она отправлена без сбоев... но почта либо:
- отправлено немедленно или
- просто не приходит
если я попытаюсь отправить в будущем.
Если бы кто-нибудь мог предложить простой пример rails 3 delayed_job, который отправляет почту в будущем, я был бы очень признателен. Я уверен, что многие люди делают это, поэтому я подозреваю, что упускаю что-то очевидное. Одна (из бесчисленных) комбинаций, которые я пробовал ниже:
delayed_job: 2.1.2 рельсы: 3.0.3 actionmailer: 3.0.3
Контроллер:
class TestmailerController < ApplicationController
def index
Testmailer.delay.test_mail
end
end
Почтовая программа:
class Testmailer < ActionMailer::Base
def test_mail
mail(:to => '([email protected]', :from => '(removedforprivacy)@gmail.com', :subject => 'Testing Delayed Job', :content_type => 'text/plain').deliver
end
handle_asynchronously :test_mail, :run_at => Proc.new { 2.minutes.from_now }
end
соответствующая почтовая часть config/environments/development.rb:
# Don't care if the mailer can't send
config.action_mailer.raise_delivery_errors = true
# Print deprecation notices to the Rails logger
config.active_support.deprecation = :log
config.action_mailer.default_url_options = { :host => 'localhost:3000' }
ActionMailer::Base.smtp_settings = {
:address => "smtp.gmail.com",
:port => 587,
:domain => "gmail.com",
:user_name => "(removedforprivacy)",
:password => "(removedforprivacy)",
:authentication => "plain",
:enable_starttls_auto => true
}
Команда работы:
rake jobs:work