允许用户在Rails中为ActionMailer创建自定义电子邮件模板

rap*_*tle 3 email ruby-on-rails actionmailer ruby-on-rails-4

我想允许Rails应用程序的用户通过表单创建自己的电子邮件模板,并将其用作将要发送邮件的网站标准电子邮件模板表单,但是我找不到任何教程,它还需要包含几个动态变量。

是否有定义的方法来做到这一点?

(因此,用户将以引用变量的形式输入电子邮件文本,该变量将在发送前进行评估)

Yos*_*Kim 5

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

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

CustomEmailTemplate.create(user_id: params[:user_id], template_body: params[:template_body])
Run Code Online (Sandbox Code Playgroud)

当需要发送有关模板的电子邮件时,您将执行以下操作:

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

为了使它真正起作用,您需要在邮件程序中执行以下操作:

def send_email(template, custom_values)
    @template = template
    @custom_values = custom_values
    mail subject: "Your subject goes here.."
end
Run Code Online (Sandbox Code Playgroud)

在send_email.html.erb中,执行以下操作:

<%= @template.template_text.gsub(/@@name@@/, @custom_values[:name]).gsub(/@@value@@/, @custom_values[:value]) %>
Run Code Online (Sandbox Code Playgroud)

您会看到模板包含“ @@ name @@”和“ @@ value @@”。这些是您可以用自定义值替换的标记。

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

我希望这有帮助。

  • 这不是很危险的安全漏洞吗?由于模板位于ERB中,因此我可以编写`&lt;%User.delete_all%&gt;`并繁荣,您的用户将被删除。 (3认同)