Actionmailer – Sparkpost模板和多语言
这是我第一次在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 " 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)我如何处理多语言支持?
谢谢。
这是一篇关于在SparkPost中创建模板的介绍文章 。
这是关于预览模板和发送测试消息的方法 – 包括变量如何工作(也称为“替换数据”)。
长篇以Ruby为中心的答案如下:
首先对您的代码进行一些观察:看起来您在全局配置SMTP,但在注册邮件程序中使用REST API。 我推荐使用SMTP上的REST API,因为它具有您需要的模板和其他丰富function。
1)您可以在此管理SparkPost UI或直接通过API调用管理电子邮件模板,如此处所述。 此处记录了模板语法。
创建并发布模板后,您可以像这样使用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' } })
您现在可以在模板中使用替换数据。 例如:
{{title}}
Hi {{first_name or 'there'}}
This {{favorites.color}} bulletin is all about {{favorites.ice_cream}} ice cream
注意:收件人替换数据优先于消息级别字段。
3)对于多语言用例,您可以考虑像我们的许多其他客户那样为每种语言创建一个模板。
顺便说一句,这看起来像几个问题 – 我们应该考虑拆分它们吗?
- “actionmailer”的未定义方法“name”:String
- Actionmailer如何运作?
- 使用ActionMailer发送多部分邮件时出现问题
- 如何在发送之前修改actionmailer email html_part
- Rails 4 Net :: SMTPAuthenticationError:535#5.7.0身份validation失败
- Mailer无法访问用户模型中的reset_token
- Rails – 使用邮件程序模板为多部分电子邮件设置多个布局
- 使用Rails邮件程序的Net :: OpenTimeout(执行过期)exception
- Rails 4.2 – Sidekiq不在开发中发送电子邮件