我正在开发一个rails 3应用程序。发送电子邮件时,我想将其保存到类似队列的数据库中,并稍后从数据库中发送排队的消息。我想将电子邮件保存到数据库而不是立即发送
但我想以正常的方式开发actionmailer部分。我只想在视图呈现之后和电子邮件发送之前立即收到电子邮件消息。
我该如何做到这一点?
谢谢。
山姆
我正在开发一个rails 3应用程序。发送电子邮件时,我想将其保存到类似队列的数据库中,并稍后从数据库中发送排队的消息。我想将电子邮件保存到数据库而不是立即发送
但我想以正常的方式开发actionmailer部分。我只想在视图呈现之后和电子邮件发送之前立即收到电子邮件消息。
我该如何做到这一点?
谢谢。
山姆
从我以前回答您的评论工作,这里的另一种方法。在Rails 3,使的ActionMailer很容易捕捉到的电子邮件为对象而不发送:
email = Notifier.account_activatation_instructions(current_user)
返回的对象将有主题,正文等作为属性。然后,您可以将此数据传递到您的电子邮件队列数据库。
我知道你想赶上呈现的电子邮件,这是可能的,但我认为有一个简单的解决方案。找出你的电子邮件需要的数据。例如,假设您的邮件需要收件人的电子邮件地址和收件人的全名。因此,您创建一个ActiveRecord子类(可能命名为ScheduledEmail
)来存储这些属性。当你想排队电子邮件时,只需保存一条新记录。
然后,您可以拥有一个调用rake任务的cron脚本。在rake任务,你可以做这样的事情:
ScheduledEmail.all.each do |email|
Notifier.foo(email).deliver
email.destroy
end
另外,如果你愿意使用它们,有一些Rails的任务调度插件。下面是提到了一些文章:
http://intridea.com/2009/2/13/dead-simple-task-scheduling-in-rails?blog=company
谢谢你的建议。实际上,我想为许多应用程序提供一个共享的电子邮件队列数据库,以便发件人不必关心电子邮件视图。 –