Я пытался выяснить, как отправить задержанную почту, используя delayed_job с rails 3. Я перепробовал практически все возможные комбинации - я могу заставить почту работать в фоновом режиме, я просто не могу заставить его отложить отправку на будущее. Таблица 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
Mailer:
class Testmailer < ActionMailer::Base
def test_mail
mail(:to => '(myemailaddress@removedforprivacy.com', :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 / environment / 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