我想允许rails应用程序的用户通过表单创建他们自己的电子邮件模板,并使用该模板作为网站标准电子邮件模板的形式发送邮件,但我可以找不到任何教程,它还需要包含一些动态变量。允许用户在Rails中为ActionMailer创建自定义电子邮件模板
是否有这样做的定义方式?
(因此用户将输入表单中的电子邮件文本引用变量 会在发送之前进行评估)
我想允许rails应用程序的用户通过表单创建他们自己的电子邮件模板,并使用该模板作为网站标准电子邮件模板的形式发送邮件,但我可以找不到任何教程,它还需要包含一些动态变量。允许用户在Rails中为ActionMailer创建自定义电子邮件模板
是否有这样做的定义方式?
(因此用户将输入表单中的电子邮件文本引用变量 会在发送之前进行评估)
有很多方法可以实现它。这是一种方法。
首先,您需要将用户生成的电子邮件模板存储在数据库中。
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 @@”。这些是你能够用自定义值取代的标志。
当然,您可以重构此代码以将替换逻辑置于模型等中,使其成为“干净的代码”。
我希望这会有所帮助。
那么最简单的将其存储到你导轨数据库。所以你应该创建一个名为EmailTemplate
的导轨模型,它有body
类型text
。
接下来创建一个表单来更新或创建新模板。
使用此特定模板并将其作为电子邮件发送。创建一个Rails邮件程序,并在视图中加载相应的EmailTemplate。所以我们认为这将如下。
<%= EmailTemplate.find(id).body.html_safe %>
上述方法是最简单的方法。如果您想让用户访问系统中的各种变量,那么我建议您查看液体标记语言(https://github.com/Shopify/liquid/)。
这不会对非常危险的安全漏洞开放吗?由于模板在ERB中,我可以编写'<%User.delete_all%>'并繁荣,您的用户将被删除。 – jason328