【问题标题】:Actionmailer - Sparkpost template and multilanguageActionmailer - Sparkpost 模板和多语言
【发布时间】:2016-06-08 07:28:56
【问题描述】:

这是我第一次在 Rails 项目中设置邮件。 有人告诉我使用 SparkPost 并为不同的语言创建模板以执行多项操作。

为简单起见,我们假设一个 user_signed_up(user) 邮件。

目前我有这个设置工作:

Gem 已安装:'sparkpost'

ma​​il.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) 如何处理多语言支持?

谢谢。

【问题讨论】:

    标签: ruby-on-rails ruby email actionmailer sparkpost


    【解决方案1】:

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

    Here's one 预览您的模板和发送测试消息 - 包括变量的工作方式(也称为“替换数据”)。

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

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

    1) 您可以通过SparkPost UI here 或直接通过API 调用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) 对于多语言用例,您可以考虑像我们的许多其他客户一样为每种语言创建一个模板。

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

    【讨论】:

    • 非常感谢,尤其是您对问题 2 的回答使它“点击”。
    • 关于 3) 我们可以使用群发邮件并为每个收件人指定不同的模板吗?
    猜你喜欢
    • 1970-01-01
    • 2016-03-09
    • 1970-01-01
    • 2017-01-07
    • 1970-01-01
    • 2012-02-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多