这是我第一次在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)如何处理多语言支持?
谢谢。
答案 0 :(得分:7)
Here's an intro article关于在SparkPost中创建模板。
Here's one有关预览模板和发送测试消息的信息 - 包括变量的工作原理(又称“替换数据&#39;”)。
长篇以Ruby为中心的答案如下:
首先对您的代码进行一些观察:看起来您在全局配置SMTP,但在注册邮件程序中使用REST API。我建议使用基于SMTP的REST API,因为它具有您需要的模板和其他丰富功能。
1)您可以SparkPost UI here管理电子邮件模板,也可以直接通过API调用as documented here管理电子邮件模板。 The template syntax is documented here.
创建并发布模板后,您可以像这样使用SparkPost客户端发送(假设您的模板ID为&#39; your-template-en&#39;):
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支持消息级和收件人级&#39; substitution_data&#39;这些是用于模板的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)对于多语言用例,您可以考虑按照我们的许多其他客户的每种语言创建模板。
顺便说一句,这看起来像几个问题 - 我们应该考虑将它们分开吗?