SendGridでメール配信を実装した後に開発者セミナーに参加したら理解が深まった

先日、SendGridにてメール送信の実装をしました。

個人でも学習のためSendGridに登録していると開発者向けセミナーへの参加案内のメールを受け取り、Doorkeeperに登録して参加しました。

予想以上に学びになったセミナーだったので、実装とセミナー通じて得た知見を共有したいと思います。

SendGridとは

SendGridはクラウドベースのメール配信サービスです。

メールを確実に届けたい場合がユースケースです。

スマートフォンの登場以降、人と人とのコミュニケーションはメールからSNSへと変化しました。 現在、メールは人にリーチをするためのツールとして形を変え活躍しています。

しかし、実情として22%のメールがInboxに届いていません。

メールを確実の届けるためには

  • 送信ドメイン認証
  • IPウォームアップ
  • バウンスメールの対処
  • レピュテーション管理
  • リストクリーニング
  • フィードバックループ
  • 配信頻度、ボリューム調整
  • ブラックリスト対策

などさまざまな工夫が必要です。これらの面倒な処理をSendGridが担ってくれます。

SendGridとMarketoの違い

メール配信サービスとして、Marketoがあります。

Marketoは、ダイレクトマーケティングとして用途に向いていると思います。メールのクリックと商品購入からデータ分析を行うことで、良質なターゲットへアプローチを継続的に行うのに優れています。SendGridでは、A/Bテストをメール文面に対してのみ行えるのに対してMarketoは、ユーザーログを追うことでより洗練されたA/Bテストを行うことができます。

要件に合わせて、サービスを使い分ける必要があります。

もっと知りたい方は、マーケティングオートメーションとメールマーケティング、どちらがより自分に適しているか?を確認してみてください。

ログイン後の基本的な流れ

SendGridログイン後画面について説明します。

ログインを行うと、以下の画像のように左のサイドバーが表示されます。

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のようなサービスは、実装を行う上で技術以外の背景知識が必要です。

機会があれば、直接アドバイスや知見を得られる開発者セミナーなどに参加するといいでしょう。