2011-02-27 37 views
3

我正在开发一个rails 3应用程序。发送电子邮件时,我想将其保存到类似队列的数据库中,并稍后从数据库中发送排队的消息。我想将电子邮件保存到数据库而不是立即发送

但我想以正常的方式开发actionmailer部分。我只想在视图呈现之后和电子邮件发送之前立即收到电子邮件消息。

我该如何做到这一点?

谢谢。

山姆

回答

2

从我以前回答您的评论工作,这里的另一种方法。在Rails 3,使的ActionMailer很容易捕捉到的电子邮件为对象而不发送:

email = Notifier.account_activatation_instructions(current_user) 

返回的对象将有主题,正文等作为属性。然后,您可以将此数据传递到您的电子邮件队列数据库。

0

我知道你想赶上呈现的电子邮件,这是可能的,但我认为有一个简单的解决方案。找出你的电子邮件需要的数据。例如,假设您的邮件需要收件人的电子邮件地址和收件人的全名。因此,您创建一个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

+0

谢谢你的建议。实际上,我想为许多应用程序提供一个共享的电子邮件队列数据库,以便发件人不必关心电子邮件视图。 –

相关问题