メールのイベントデータをGoogleスプレッドシートに保存する方法

Twilio SendGridではメール到達などのイベントを確認できるActivityという機能を提供していますが、この内容をそのままエクスポートすることはできません(※追記:2024年のアップデートにより、エクスポート可能になりました)。その代わりに、イベントのデータを任意のURLにPOSTするEvent Webhookを提供しており、データを好きな場所(サーバ)に逐次保存することができます。ただ、利用にはHTTPレスポンス処理などの専門知識が必要なため、構築ハードルが少し高いのがネックです。
今回はMicrosoftが提供する自動化ツール(RPA; Robotic Process Automation)であるPower Automateを用いて、プログラミングの知識がない方でもGoogleスプレッドシートにイベントデータを保存できる方法を紹介します。
必要なもの
- SendGridアカウント
- 作成済みである前提で進めます(作成は新規会員登録ページから)。
- Googleアカウント
- 持っていない場合は新規作成します。
- Microsoftアカウント
- 持っていない場合はPower Automateのサイトから登録してください。
- なお今回のフローは「プレミアムコネクタ」が利用可能な有料プランが必要です。企業や教育機関のOffice365アカウントがあれば、90日間無料試用できる場合もあるようです。
手順
Googleスプレッドシートの準備
Googleドライブのマイドライブに、新しいスプレッドシートを作成します(左上の新規ボタンから)。今回は「powerautomate_eventwebhook」というファイル名をつけます。
下の図のように、Event WebhookでPOSTされるパラメータ名を先頭の行に入力しましょう。以下の文字列をA1セルにコピー&ペーストしたあと、セルの右下に表示されるオプションから「テキストを列に分割」をクリックすればOKです。
email, timestamp, event, smtp-id, sg_event_id, sg_message_id, response, status, reason, type, asm_group_id, ip, url, useragent
なお、このリストはパラメータを網羅しているわけではなく、代表的なものを抜き出しています。このほかにも種類はあり、ユーザ自身が定義できるものもあります。

Power Automateのフローの作成
Power Automateのブラウザ版を利用して、実際にフローを作成します。
Webhookを受信する設定
最初に、SendGridからPOSTされるデータを受け取る設定を行います。
まず、Power Automateの左側のメニューから「作成」を選んで「インスタント クラウド フロー」を選択します。
フローのトリガーを選択する画面になるので、一番下にある「HTTP要求の受信時」を選んで「作成」ボタンを押します。
するとフロー作成画面になり、「HTTP要求の受信時」のボックスが表示されるのでクリックします。「要求本文の JSON スキーマ」に下の文字列をコピー&ペーストしてください。また詳細オプションを表示して、「method」を「POST」にします。ここではSendGridからEvent Webhookで送られてくるデータの型を定義しています。
最後に「+新しいステップ」を押します。

{
"type": "array",
"items": {
"type": "object",
"properties": {
"email": {
"type": "string"
},
"timestamp": {
"type": "integer"
},
"smtp-id": {
"type": "string"
},
"sg_event_id": {
"type": "string"
},
"sg_message_id": {
"type": "string"
},
"event": {
"type": "string"
},
"type": {
"type": "string"
},
"response": {
"type": "string"
},
"status": {
"type": "string"
},
"reason": {
"type": "string"
},
"ip": {
"type": "string"
},
"url": {
"type": "string"
},
"useragent": {
"type": "string"
},
"asm_group_id": {
"type": "integer"
}
},
"required": [
"email",
"timestamp",
"sg_event_id",
"sg_message_id",
"event"
]
}
}
Googleスプレッドシートに書き込む設定
次にGoogleスプレッドシートとの繋ぎ込みを行います。
どのようなアクションを行うかを設定しましょう。検索欄で「google sheets」と入力すると「行の挿入」というアクションが表示されるので選択します。

ここでGoogleアカウントのログインが求められます。Power AutomateがGoogleスプレッドシートを操作できるように、アカウントをPower Automateと連携させることになります。表示に従ってPower Automateからのアクセスを許可しましょう。
表示される「行の挿入」をクリックすると、詳細な内容を入力する画面になります。「ファイル」欄の右端のフォルダアイコンをクリックして、Googleドライブの中にあるスプレッドシート(今回はpowerautomate_eventwebhook)を選択します。「ワークシート」にはスプレッドシートでパラメータを入力したシートの名前を選択してください(今回はデフォルトから変更していないので「シート1」)。
少し待つとPower Automateがスプレッドシートを読み込み、シートの先頭行に入力したパラメータ(email、timestamp…)が追加で表示されます(下図)。ここではそれぞれのカラムに挿入する値を決めることができます。入力欄をクリックするとWebhookの受信のステップで設定したパラメータ名が表示されるので、シートのパラメータと対応するものを選択してください。これで、SendGridから送られてきたデータの「email」パラメータの値を、スプレッドシートの「email」カラムに挿入するように設定できました。全て入力し終えたら画面下の「保存」をクリックします。
最後にもう一度、「HTTP要求の受信時」のボックスをクリックしましょう。すると「HTTP POSTのURL」の欄にPOST用のURLが表示されているのでコピーしておきます。
Event Webhookの設定とテスト
SendGridにログインして、Settings > Mail Settings からEvent Webhooksにアクセスします。「Create new webhook」を押すと右側に設定画面が表示されるので、「Friendly Name」に任意の名前を入力し、「Post URL」に先ほどコピーしたURLをペーストします。「Actions to be posted」のチェックボックスには全てチェックを入れ、「Security features」はオフのまま、下部左側の「Test Integration」のボタンをクリックします。

するとSendGridからテスト用のデータがPower AutomateにPOSTされ、Power Automateがそれをスプレッドシートに書き込みます。スプレッドシートを確認して、以下の図のようにデータが入っていたら成功です!Event Webhookの画面に戻って「Save」ボタンを押し、設定を完了させましょう。
おわりに
このように、Power Automateを使うとプログラミングの知識がなくてもメールのイベントのデータを保存することができます。今回は出力先としてGoogleスプレッドシートを選びましたが、Online版ExcelやSlackへの出力などにも応用可能です。うまく活用してメールのデータを収集しましょう。
SendGridのイベントやEvent Webhookの詳細については以下のページも参考にしてください。






