LoginSignup
3
5

More than 5 years have passed since last update.

SendGridのTemplate EngineをRubyから使う

Posted at

Template Engineとは

SendGrid では、Template の管理機能を持っている。この機能を使うことにより、テンプレートの管理とアプリケーションを分離することができる。テンプレートの編集は、管理画面より行える。ちょっとした変更などがアプリのデプロイなしに、すぐに行えるのがメリット。

メールの文面考える人と、アプリ作る人が別で、もろもろ面倒くさいよー。という時に使うと良さそう。

この記事でやること

Ruby(2.2.3)を使ってSendGridのTemplate Engine機能を使う

使用するGems

テンプレートの編集

SendGrid Dashboard の左のメニューより、TEMPLATESを選び、テンプレートを作成する。

スクリーンショット 2015-09-25 10.49.20.png

テンプレート名は適当に。あとから変更することができる。

スクリーンショット 2015-09-25 10.50.20.png

スクリーンショット 2015-09-25 10.57.14.png

最初に提示されるテンプレートには、<%subject%>, <%body%> がある。これは、APIで送信する subject, body の内容に対応する。ただし、一部分だけ置き換えたメールを送りたいときに、アプリ側でテンプレート割り当ててbodyを作るのでは、ちょっと使い勝手が悪い(と個人的に思っている)。そこで、Substitute Tags を使う方向性とする。
<%subject%><%body%>タグを消したテンプレートは残念ながら保存できないので、文末などに置いておく。

スクリーンショット 2015-09-25 10.57.43.png

保存すると、IDが生成される。このIDをメール送信時に利用することができる。

いざメール送信

ごく最近、SendGridのオフィシャルライブラリでは、AccessTokenに対応したので、その機能を使ってみる。

と思ったのだが、sendgrid-ruby(1.0.1) を使おうとした時に、ちゃんとロードできない問題があった。PRを送って、取り込んでもらいました。(現状は修正済み)

Gemfile
source 'https://rubygems.org'

gem 'sendgrid-ruby'
gem 'smtpapi'
sample.rb
require 'sendgrid-ruby'
require 'smtpapi'

client = SendGrid::Client.new do |c| 
  c.api_key = ENV['SENDGRID_APIKEY']
end

# 送信先
to = ['kawahara@example.com']

header = Smtpapi::Header.new
# テンプレート有効化
header.add_filter('templates', 'enable', 1)
header.add_filter('templates', 'template_id', '916f4c70-563e-46ac-a4ca-5867f0a62591')
# 送信先を配列で指定
header.set_tos(to)
# 代替文字の設定 送信先と同じく配列で指定
header.add_substitution('-name-', ['kawahara'])

mail = SendGrid::Mail.new do |m| 
  m.to = to
  m.from = 'noreply@example.com'
  # subject と、text の指定は必須なのでとりあえずスペース。。これがちょっと嫌だなぁ
  m.subject = ' ' 
  m.text = ' ' 
  m.smtpapi = header
end
result = client.send(mail)
p result.body            

API KEYは、SendGridの設定メニューより発行できる。ついこないだのバージョン (0.0.3)までは、管理用のユーザ名・パスワードが必要だったが、それらの情報をアプリで共有する必要がなくなるので、より安全。

実行して送信を確認。

$ bundle install 
$ SENDGRID_APIKEY=APIKEY bundle exec ruby sample.rb

スクリーンショット 2015-09-26 15.13.20.png

来た。-name-が kawahara に置き換わっている。

複数人に送りたい場合は、to の配送先を複数選び、同時に Substitution も配列で送る必要があるので要注意。
tos=['メールアドレスA', 'メールアドレスB'], names=['a', 'b'] のような感じで対応付ける必要がある。

CC/BCCつきのメールでもやってみたりはしたのだが、Substitutionが置き換えられていないメールが来てしまった。。。これ、どうにかならんのですかね。。

参考資料

3
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
5