Rails Mailers的一般指南

时间:2015-08-11 15:43:32

标签: ruby-on-rails ruby email ruby-on-rails-4

我正在使用Rails创建一个事件注册工具,但我在编写邮件部分时遇到了问题。我正在使用Mailgun API并且我已经获得了通用#34;感谢您注册"用户注册时发送的电子邮件以及发送到我的电子邮箱的联系表单提交。该应用程序的部分要求是能够发送促销电子邮件(与感谢您注册电子邮件分开)。这些促销电子邮件更像是(一周提醒)类型的电子邮件。

因此,这些电子邮件需要由管理员设置事件来创建,因为这是一个通用工具。因此,为了保存管理员创建的电子邮件,我有一个邮件对象。所以关系有点像这样:

活动有很多邮件,注册等(并且属于该活动)。它们是嵌套资源,因为它们特定于事件。现在我需要弥合如何从管理员创建的邮件发送到Mailgun的差距。问题是我们必须能够添加收件人,因为他们可能希望向除了注册人之外的人发送活动。所以我需要从邮件#show(显示邮件的预览,需要能够添加/删除收件人),遍历所有收件人,并发送mailing.message字段中的邮件

我非常接近完成这个工具,除了这封邮件,我无法解决这个问题。我看到很多创建邮件程序的例子,但我不确定这是否对我有用,因为邮件是唯一的,它需要从邮件程序对象获取邮件和主题。有什么建议或指导吗?我真的很难完成这部分。

2 个答案:

答案 0 :(得分:0)

我假设你有一个带有电子邮件列的用户模型

我会设置一个额外的模型,即

class PromoMail < ActiveRecord::Base
  has_many :users # recpients
  validates :body, presence: true
end

然后添加一个控制器,管理员可以在其中创建这些控制器并在正文字段中插入邮件内容并添加收件人。

然后在现有邮件程序中创建一个新方法,将带有已放弃主体的邮件发送给一个用户。

然后向前面提到的控制器添加一个动作,通过循环关联的用户发送PromoMail,并为每个人调用ne mailer metod。

答案 1 :(得分:0)

这里有几个步骤,没有详细介绍。

1)制作一个rake任务,查找需要发送的任何电子邮件,并将其发送出去。您可能需要扩展架构以记录是否已发送邮件(或邮件或其他)。 rake任务本身不应该有太多代码,它应该只调用例如User或Mailing中的类方法。

您需要考虑系统如何决定哪些电子邮件需要发送出去。我发现流程图在这里可能会有所帮助:它将涉及迭代所有用户,或所有邮件或其他东西,并对它们应用各种逻辑测试。您可能会发现当前架构不符合工作要求,在这种情况下将其展开。

2)安排此rake任务定期运行,例如每天一次或每周一次。可以使用各种计划任务运行程序,例如cron,或者如果您使用Heroku,则需要使用其计划程序工具,例如。