我一直在尝试使用rails 3和delayed_job发送延迟邮件。我已经尝试了所有可行的可能性组合 - 我可以让邮件在后台运行,但我无法将其延迟发送到未来的某个时间。数据库中的延迟任务表被清除,日志显示“已发送”,延迟任务处理器接收并成功发送任务……但是邮件要么立即发送,要么根本不会到达,如果我尝试在未来发送邮件。
如果有人能提供一个简单的Rails 3 Delayed Job示例,用于延迟将邮件发送到未来的时间,那就太好了。我相信许多人都这样做,所以我认为我可能漏掉了一些明显的东西。以下是我尝试过的其中一种组合:
delayed_job:2.1.2 rails:3.0.3 actionmailer:3.0.3
控制器:
如果有人能提供一个简单的Rails 3 Delayed Job示例,用于延迟将邮件发送到未来的时间,那就太好了。我相信许多人都这样做,所以我认为我可能漏掉了一些明显的东西。以下是我尝试过的其中一种组合:
delayed_job:2.1.2 rails: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 => '(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/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