2016-02-25 54 views
4

这是我第一次在rails项目中设置邮件。 我被告知使用SparkPost并为多种动作创建不同语言的模板。Actionmailer - Sparkpost模板和多语言

为了简单起见,可以说一个user_signed_up(用户)邮件。

目前我有这样的设置工作:

宝石安装: '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 <[email protected]>" 
    layout 'mailer' 
end 

signup_mailer.rb

class SignupMailer < ApplicationMailer 
    def user_signed_up(user) 
    receiver = user.email 
    sender = '[email protected]' 
    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 

而且我可以成功发送电子邮件。

虽然,由于多种语言和身体风格不同,这绝对不是可扩展的。

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

SparkPost Template Create

但这里是我坚持和回答下列问题会帮助我极大:

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

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

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

谢谢。

回答

7

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

Here's one预览您的模板并发送测试消息 - 包括变量如何工作(又名'替代数据')。

朗形式红宝石为中心的答案如下:

一对夫妇在你的代码观察第一:它看起来像你都配置SMTP全球,但在您的注册邮件使用REST API。我建议通过SMTP的REST API,因为它具有您需要的模板和其他丰富的功能。

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

一旦你有一个创建并发布了一个模板,你可以使用SparkPost客户端这样的发送(假设你的模板ID是“你的模板-EN”):

require 'sparkpost' 

host = 'https://api.sparkpost.com' 
SparkPost::Request.request("#{host}/api/v1/transmissions", API_KEY, { 
    recipients: [ 
    { address: { email: '[email protected]' } } 
    ], 
    content: { 
    template_id: 'your-template-en' 
    } 
}) 

2)SparkPost支持消息级别和收件人级别的'substitution_data',它们是用于模板的JSON格式的变量。以下是一个示例传输请求:

SparkPost::Request.request("#{host}/api/v1/transmissions", API_KEY, { 
    recipients: [ 
    { 
     address: { email: '[email protected]' }, 
     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)对于多语言用例,您可能会考虑像我们其他许多客户那样按照语言创建一个模板。

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

+0

非常感谢你,特别是你对问题2的回答使它“点击”。 –