先日、SendGridにてメール送信の実装をしました。
個人でも学習のためSendGridに登録していると開発者向けセミナーへの参加案内のメールを受け取り、Doorkeeperに登録して参加しました。
予想以上に学びになったセミナーだったので、実装とセミナー通じて得た知見を共有したいと思います。
SendGridとは
SendGridはクラウドベースのメール配信サービスです。
メールを確実に届けたい場合がユースケースです。
スマートフォンの登場以降、人と人とのコミュニケーションはメールからSNSへと変化しました。 現在、メールは人にリーチをするためのツールとして形を変え活躍しています。
しかし、実情として22%のメールがInboxに届いていません。
メールを確実の届けるためには
- 送信ドメイン認証
- IPウォームアップ
- バウンスメールの対処
- レピュテーション管理
- リストクリーニング
- フィードバックループ
- 配信頻度、ボリューム調整
- ブラックリスト対策
などさまざまな工夫が必要です。これらの面倒な処理をSendGridが担ってくれます。
SendGridとMarketoの違い
メール配信サービスとして、Marketoがあります。
Marketoは、ダイレクトマーケティングとして用途に向いていると思います。メールのクリックと商品購入からデータ分析を行うことで、良質なターゲットへアプローチを継続的に行うのに優れています。SendGridでは、A/Bテストをメール文面に対してのみ行えるのに対してMarketoは、ユーザーログを追うことでより洗練されたA/Bテストを行うことができます。
要件に合わせて、サービスを使い分ける必要があります。
もっと知りたい方は、マーケティングオートメーションとメールマーケティング、どちらがより自分に適しているか?を確認してみてください。
ログイン後の基本的な流れ
SendGridログイン後画面について説明します。
ログインを行うと、以下の画像のように左のサイドバーが表示されます。
各種要素について説明します。
Dashboard
ユーザー情報やメールの簡易的な送信状況を把握できます。
Marketing
マーケティングメールを作成できます。このタブを開発者が触ることは少ないと思います。
Templates
Marketingタブの利用機会が少ないのは、Templatesを作成すると得られるtemplate_id
を利用してWebAPI経由でメール送信のデータをセットできるからです。詳しくは、テンプレートを使用したメール送信を確認してください。
Templatesでは、トランザクションメールとマーケティングメール2種類のメールを選択できます。
トランザクションメールとは、何らかのトリガによって自動送信されるメールです。決済の通知メールなどがこれにあたります。マーケティングメールとは、決まった時間に宛先リストに対して戦略的に送信されるメールです。 詳しい説明は、トランザクションメールとマーケティングメールの違いとは?を確認してください。
また、Templatesはバージョン管理を行うことができることのでマーケティングの方々に伝えておきましょう。
Stats
送信結果の集計データを確認できます。例えば、カテゴリー検索があります。カテゴリー検索をしたいという要求を満たすために、メール送信時のカテゴリーとして日時情報と概要を組み合わせたカテゴリーを作っておくと良さそうだということを推測できたりします。
Activity
送信したメールの状態を確認できます。メールの開封やDropなどの状態があります。
Suppressions
バウンスリスト、配信停止リストなどを確認できます。
公式ドキュメント
SendGridには、日本語のドキュメントが整備されています。英語が公式情報ですが、問題なく利用できます。
Gem
SendGrid用のGemが公開されています。OSSのバクによる配信メールの誤作動等は、利用者の責任です。
Quick Startで基本的な使い方を、USE_CASESでより一般的な使い方を網羅できます。
もっと詳しく知りたい欲張りさんには、Rootディレクトリ配下のsendgrid-ruby/examples/に目を通すと幸せになります。メール送信以外の各種データ取得APIの利用方法などを知ることができます。もし、メール配信実装のみにフォーカスしているのならば、sendgrid-ruby/examples/helpers/mail/example.rbを見るといいでしょう。
実装
require 'sendgrid-ruby' include SendGrid data = JSON.parse('{ "personalizations": [ { "to": [ { "email": "test@example.com" } ], "subject": "Sending with Twilio SendGrid is Fun" } ], "from": { "email": "test@example.com" }, "content": [ { "type": "text/plain", "value": "and easy to do anywhere, even with Ruby" } ], "template_id": "TEMPLATE_ID" }') sg = SendGrid::API.new(api_key: ENV['SENDGRID_API_KEY']) response = sg.client.mail._("send").post(request_body: data) puts response.status_code puts response.body puts response.parsed_body puts response.headers
実装は、上記のように単純です。 エラー処理やログをどう扱うか、どのようなdataをrequest_bodyにこめるのかという観点のみに気をつければ特に複雑なコードには、ならないです。
テストを行う際は、RubyだとVCRのようなモックを利用してテストを行いましょう。
実装する上での注意点&Tips
- 大量送信時に処理が落ちた場合に、途中から送信できるようにログを吐くようにする
- メール送信に対して課金が発生する。その他のAPIは、無料
- 大量送信のテストは、SendGridが用意しているテスト用ドメインを利用する
- 独自ドメインを利用すると、SendGrid経由という表示がなくなる
- WebAPIは、1回のリクエストで最大1000宛先まで送信できる
- バウンスするとわかっているメールアドレスを送信するとDropで弾いてくれるが料金が加算されるので、バウンスリストを管理して省いた方が良いかも
まとめ
エンジニアとして働く中でさまざまなクラウドサービスを利用することがあります。
SendGridのようなサービスは、実装を行う上で技術以外の背景知識が必要です。
機会があれば、直接アドバイスや知見を得られる開発者セミナーなどに参加するといいでしょう。