2015-05-13 54 views
3

我想允许rails应用程序的用户通过表单创建他们自己的电子邮件模板,并使用该模板作为网站标准电子邮件模板的形式发送邮件,但我可以找不到任何教程,它还需要包含一些动态变量。允许用户在Rails中为ActionMailer创建自定义电子邮件模板

是否有这样做的定义方式?

(因此用户将输入表单中的电子邮件文本引用变量 会在发送之前进行评估)

回答

3

有很多方法可以实现它。这是一种方法。

首先,您需要将用户生成的电子邮件模板存储在数据库中。

CustomEmailTemplate.create(user_id: params[:user_id], template_body: params[:template_body]) 

当它的时间来发送电子邮件的模板,你会做这样的事情:

custom_values = { name: "Whatever", value: "nice" } 
template = CustomEmailTemplate.find(template_id) 
CustomerEmailer.send_email(template, custom_values).deliver 

为了使它真正发挥作用,你需要做的是这样的邮件:

def send_email(template, custom_values) 
    @template = template 
    @custom_values = custom_values 
    mail subject: "Your subject goes here.." 
end 

在send_email.html.erb,做这样的事情:

<%= @template.template_text.gsub(/@@[email protected]@/, @custom_values[:name]).gsub(/@@[email protected]@/, @custom_values[:value]) %> 

您看到该模板包含“@@ name @@”和“@@ value @@”。这些是你能够用自定义值取代的标志。

当然,您可以重构此代码以将替换逻辑置于模型等中,使其成为“干净的代码”。

我希望这会有所帮助。

+2

这不会对非常危险的安全漏洞开放吗?由于模板在ERB中,我可以编写'<%User.delete_all%>'并繁荣,您的用户将被删除。 – jason328

2

那么最简单的将其存储到你导轨数据库。所以你应该创建一个名为EmailTemplate的导轨模型,它有body类型text

接下来创建一个表单来更新或创建新模板。

使用此特定模板并将其作为电子邮件发送。创建一个Rails邮件程序,并在视图中加载相应的EmailTemplate。所以我们认为这将如下。

<%= EmailTemplate.find(id).body.html_safe %> 

上述方法是最简单的方法。如果您想让用户访问系统中的各种变量,那么我建议您查看液体标记语言(https://github.com/Shopify/liquid/)。

相关问题