首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Actionmailer - Sparkpost模板和多语言

Actionmailer - Sparkpost模板和多语言
EN

Stack Overflow用户
提问于 2016-02-25 13:31:35
回答 1查看 1.5K关注 0票数 4

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

为了简单起见,让我们说一封user_signed_up(用户)邮件。

目前,我已经完成了以下设置:

Gem安装:“sparkpost”

mail.rb

代码语言:javascript
复制
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

代码语言:javascript
复制
require 'sparkpost'
class ApplicationMailer < ActionMailer::Base
  default from: "Seal Notification <noreply@foobar.com>"
  layout 'mailer'
end

signup_mailer.rb

代码语言:javascript
复制
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)如何处理多语言支持?

谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-02-25 15:14:36

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

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

以下是以Ruby为中心的长形答案:

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

1)您可以通过API调用SparkPost UI here或直接通过API调用as documented here来管理电子邮件模板。The template syntax is documented here.

一旦创建并发布了模板,就可以像这样使用SparkPost客户机发送(假设模板ID是“you - template -en”):

代码语言:javascript
复制
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格式的变量,可以在模板中使用。下面是一个传输请求示例:

代码语言:javascript
复制
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'
  }
})

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

代码语言:javascript
复制
<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)对于多语言用例,您可能会像我们的许多其他客户一样,考虑为每种语言创建一个模板。

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

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35628731

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档