Actionmailer - Sparkpost模板和多语言

Mar*_*ert 4 ruby email ruby-on-rails actionmailer sparkpost

这是我第一次在rails项目中设置邮件.有人告诉我使用SparkPost并为多个动作创建不同语言的模板.

为简单起见,我们说一个user_signed_up(用户)邮件.

目前我有这个设置工作:

Gem安装:'sparkpost'

mail.rb

ActionMailer::Base.smtp_settings = {
  address: "smtp.sparkpostmail.com",
  port: 587,
  enable_starttls_auto: true,
  user_name: "SMTP_Injection",
  password: SPARKPOST_API_KEY,
  domain: 'foo-bar.com'
}

ActionMailer::Base.delivery_method = :smtp
ActionMailer::Base.default charset: "utf-8"
Run Code Online (Sandbox Code Playgroud)

application_mailer.rb

require 'sparkpost'
class ApplicationMailer < ActionMailer::Base
  default from: "Seal Notification <noreply@foobar.com>"
  layout 'mailer'
end
Run Code Online (Sandbox Code Playgroud)

signup_mailer.rb

class SignupMailer < ApplicationMailer
  def user_signed_up(user)
    receiver = user.email
    sender = 'myself@test.com'
    title = 'Thanks for registering'
    body = 'This is a test body'
    sparky = SparkPost::Client.new(SPARKPOST_API_KEY)
    sparky.transmission.send_message(receiver,sender,title,body)
  end
end
Run Code Online (Sandbox Code Playgroud)

我可以成功发送电子邮件.

虽然,由于多语言和身体不能风格,这绝对不可扩展.

现在我需要设置模板以允许非技术人员调整电子邮件模板.

SparkPost模板创建

但这里是我被困的地方,对以下问题的回答将极大地帮助我:

1)如何发送特定的电子邮件模板?

2)如何将变量传递给这些模板?

3)我如何处理多语言支持?

谢谢.

小智 7

这是一篇关于在SparkPost中创建模板的介绍文章.

这是关于预览模板和发送测试消息的方法 - 包括变量如何工作(也称为"替换数据").

长篇以Ruby为中心的答案如下:

首先对您的代码进行一些观察:看起来您在全局配置SMTP,但在注册邮件程序中使用REST API.我建议使用基于SMTP的REST API,因为它具有您需要的模板和其他丰富功能.

1)您可以管理电子邮件模板无论是在这里SparkPost UI通过API调用或直接作为记录在这里. 此处记录了模板语法.

创建并发布模板后,您可以像这样使用SparkPost客户端发送(假设您的模板ID是'your-template-en'):

require 'sparkpost'

host = 'https://api.sparkpost.com'
SparkPost::Request.request("#{host}/api/v1/transmissions", API_KEY, {
  recipients: [
    { address: { email: 'recipient@example.com' } }
  ],
  content: {
    template_id: 'your-template-en'
  }
})
Run Code Online (Sandbox Code Playgroud)

2)SparkPost支持消息级和接收者级别的"substitution_data",它们是用于模板的JSON格式变量.这是一个示例传输请求:

SparkPost::Request.request("#{host}/api/v1/transmissions", API_KEY, {
  recipients: [
    {
      address: { email: 'recipient@example.com' },
      substitution_data: {
        first_name: 'Recip',
        favorites: {
          color: 'Orange',
          ice_cream: 'Vanilla'
        }
      }
    }
  ],
  content: {
    template_id: 'your-template-en'
  },
  substitution_data: {
    title: 'Daily News'
  }
})
Run Code Online (Sandbox Code Playgroud)

您现在在模板中使用替换数据.例如:

<h1>{{title}}</h1>
<p>Hi {{first_name or 'there'}}</p>
<p>This {{favorites.color}} bulletin is all about {{favorites.ice_cream}} ice cream</p>
Run Code Online (Sandbox Code Playgroud)

注意:收件人替换数据优先于消息级别字段.

3)对于多语言用例,您可以考虑像我们的许多其他客户那样为每种语言创建一个模板.

顺便说一下,这看起来像几个问题 - 我们应该考虑拆分它们吗?