Actionmailer - Sparkpost 模板和多语言

Actionmailer - Sparkpost template and multilanguage

这是我第一次在 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"

application_mailer.rb

require 'sparkpost'
class ApplicationMailer < ActionMailer::Base
  default from: "Seal Notification <noreply@foobar.com>"
  layout 'mailer'
end

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

并且我可以成功发送邮件。

尽管如此,由于多语言和正文无法设置样式,这绝对无法扩展。

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

但这就是我被困的地方,以下问题的答案将对我有很大帮助:

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

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

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

谢谢。

Here's an intro article 关于在 SparkPost 中创建模板。

Here's one 关于预览模板和发送测试消息 - 包括变量的工作原理(又名 'substitution data')。

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

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

1) 您可以通过 SparkPost UI here or directly by API call as documented here. The template syntax is documented here.

管理电子邮件模板

创建并发布模板后,您可以像这样使用 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'
  }
})

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'
  }
})

您现在可以在模板中使用替换数据。例如:

<h1>{{title}}</h1>
<p>Hi {{first_name or 'there'}}</p>
<p>This {{favorites.color}} bulletin is all about {{favorites.ice_cream}} ice cream</p>

注意:收件人替代数据优先于消息级字段。

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

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