Rails (gem 'sendgrid-ruby') × SendGrid の Event Notification で API Key ごとの独自メタ情報を設定する
SendGrid の Event Notification の使い所
SendGrid には Event Notification という Webhook を設定することでメールの送信状態をイベント情報として取得することができます。
メールを SendGrid が受信した、送信先に届いた、等の情報です。
例えば、未達だったメールの情報を取得したい場合等に、この Webhook を利用し、イベント情報を保存することで調査や集計が可能です。
AWS API Gateway + Lambda で構築したエンドポイントに投げ、S3 に保存し、送信失敗件数を Athena で検索集計する、ということができます。
何か問題でも?
SendGrid は 1 アカウントで複数のプロジェクト毎の API Key を発行することができます。
ですが、 イベント情報にはどの API Key を利用してメール送信したか、の記録がありません。
複数の API Key がある場合に、どのプロジェクトのどの環境で送信したのか、調査や集計ができません。
これを解決する手段として、メール送信時にメタ情報を登録する方法があります。
Rails 5.2 で試してみました。
まずはセットアップ
- Gemfile
1 | gem 'sendgrid-ruby' |
- config/initializers/sendgrid.rb
1 | sendgrid_api_key = Rails.application.credentials.dig(Rails.env.to_sym, :sendgrid_api_key) |
api_key は credentials に設定し、そこから取得。
※ RAILS_ENV=development でお試し可なので直に設定でも可。そこは自己責任で
- lib/mail/send_grid.rb
1 | # frozen_string_literal: true |
#{Rails.env}-#{Settings.project_name}
の部分は適宜変更してください。
メール送信してみる
rails c
して
1 | ActionMailer::Base.mail(to: "nakayama.kinnikunn@hogehoge.jp", from: "info@<sender authentication で認証したドメイン>", subject: "メールタイトル", body: "すいません、テスト送信です").deliver_now |
すると、Event Notification では以下の様なイベント情報が取得できます。
1 | {"email":"nakayama.kinnikunn@hogehoge.jp","timestamp":1551964210,"ip":"12.345.67.89","sg_event_id":"xxxxxxxxxxxxxxxx","sg_message_id":"xxxxxxxxxxxxxxxxxxxx.yyyyyyyyyyyyyyyyyyyyyy","category":["staging-kenkoboys"],"useragent":"Mozilla/5.0 (Windows NT 5.1; rv:11.0) Gecko Firefox/11.0 (via ggpht.com GoogleImageProxy)","event":"open"} |
注目すべきは category":["staging-kenkoboys"]
です。
add_category したカテゴリ情報が取得でき、これで どの API Key のイベント情報であるかの紐付けができます。
以上
参考になれば幸いです。
Rails (gem 'sendgrid-ruby') × SendGrid の Event Notification で API Key ごとの独自メタ情報を設定する