Google Apps ScriptでGmailのメール内容を解析してスプレッドシートに書き込むための手順

はじめに

Webサイトのお問い合わせフォームから送信されたメールを蓄積して傾向などを調べることは多くの人にとって重要だと思います。しかし、そのようなことはせずその都度対応だけして終っている方も多いと思います。ここでは、お問い合わせメールの管理の一歩として、お問い合わせメールの内容をGoogleスプレッドシートに自動で保存するシステムの構築手順をメモします。

構築するシステムの前提と概要説明

まず、以下のようなお問い合わせフォームがWebサイトにあるとします。
inquiry_form_example
上記を見てわかるように、このお問い合わせフォームには以下の4項目の情報が含まれます。

  • お名前
  • メールアドレス
  • 電話番号
  • お問い合わせ内容

そしてこのお問い合わせフォームが送信される度に、その内容が以下のようなスプレッドシートに自動保存されるようになります。
spreadsheet_example

以降で上記を実現するための手順を説明します。

構築の流れ

以下のような流れになります。

  • Webサイトの自動返信メールを設定
    まずはじめに、お問い合わせフォームからの自動返信メールを自分のGmailアドレスに届くよう設定しておきます。また、自動返信メールの本文をXML形式で記述しておきます。
  • Gmailの受信メールを解析してスプレッドシートに書き込むGoogle Apps Script作成
    お問い合わせフォームからの内容を保存するためのスプレッドシートを作成して、メール取得やスプレッドシート保存を行うGoogle Apps Scriptを書きます
  • Google Apps Scriptを一定時間間隔で実行するための設定
    最後に書いたスクリプトを一定時間間隔で自動実行するよう設定します。

それぞれについて順番に書きます。

Webサイトの自動返信メールを設定

まず前提として、自分のWebサイトのお問い合わせフォームの自動返信メールの送信先や内容を自由に設定できるとしています。
例えば、WordPressでプラグインなどを使用してお問い合わせフォームを設置した経験がある方は分かるかと思いますが、これらのお問い合わせフォームでは、お問い合わせフォーム送信時に、お問い合わせした本人のアドレスや自分で指定したアドレスに自動返信メールを送信することができます。また、この自動返信メールの中身は自由に設定できます。そこで、これを利用してこの自動返信メールの送信先の1つを自分のGmailに設定しておきます。

また、今回は自動返信メールに以下のようなXML形式で記述された内容を記述しておきます。XML形式で記述する理由は、お問い合わせメールの内容に含まれる各情報(ここではお名前、メールアドレス、電話番号、お問い合わせ内容の4項目)をGoogle Apps Scriptを使って取り出しやすくするためです。なお、ここで使うXMLは全く複雑なものではなく、馴染みがなくても見ればすぐに分かると思います。詳しくは後述します。
例えば、WordPressのプラグインである「Contact Form 7」の場合は、お問い合わせフォームの各項目の変数名を[your-name]のように指定できます。ですので、Contact Form7 を使っている場合は以下のように自動返信メールの中身を設定しておきます。以下の[your-name][your-email][your-tel][your-content]がそれぞれお問い合わせフォームで入力された値に置換されてメールが送信されます。


上記のような自動返信メールを設定しておけば、当然ながら以下のようなメールが指定したGmailに届くようになります。
gmail_example

そして後はGoogle Apps Scriptでメールを取得&XML解析して、各マークアップの値を取得します。これについては後述します。
XMLの記述ルールについては以下のサイトが参考になると思います。


1週間で学ぶIT基礎の基礎 XML入門~乗り遅れたと感じるあなたへ(第2回)| ITPro

なお、注意点としては、XML部分より以前に1文字でも記述されていると、Content is not allowed in prologのようなエラーがGoogle Apps Scriptから警告されます。
また、逆にXML部分よりも後に1文字でも記述されていると、今度はContent is not allowed in trailing sectionというようなエラーが表示されるので注意が必要です。
すなわち、XML形式の前後に不要な文字は記述せず、XMLのルールに準拠している必要があります。

Gmailの受信メールを解析してスプレッドシートに書き込むGoogle Apps Script作成

あとはメール内容の保存先となるスプレッドシートを新規作成して、新規作成したスプレッドシートからスクリプトエディタを開きます。そしてそこにスクリプトを書き込みます。
なお、スクリプトエディタは以下のようにメニューの「ツール」から開けます。
script_editor

スクリプト

スクリプトは以下のようになります。以下のスクリプトは条件に合致するメールを自分のGmailアカウントから検索して取得、取得したメールの受信日、件名、本文を取り出しています。そしてメール本文についてはさらにXMLを解析して各マークアップに格納されている値を取得し、スプレッドシートにまとめて書き込んでいます。
コメントを入れているので長くなっていますが、コード自体はかなり短くて済みます。内容については、コメントを参照して頂ければ大体わかるかと思います。

以下が注意点となります。

  • 上記はスレッド(同じ差出人のメールがまとまったもの)形式でメールを取得しています。そしてスレッドには複数のメールが含まれる場合があるので、各スレッドの各メールに対してXML解析をしています。ただし、上記のコードでは自動返信メールに対して返信などをすることはなく、自動返信メールのみで完結すること(すなわち、各スレッドにはXML形式で記述された1つの自動返信メールのみが含まれる)ことを想定しています。
  • 取得するメールの条件として、「差出人のメールアドレスがcontact@example.localである」 かつ 「未読である」に設定しています。ここの条件としては、メールの件名や特定のラベルなど他にも色々な条件を指定可能です。詳しくは以下のURLが参考になると思います。

    Gmail で使用できる検索演算子 | Gmailヘルプ
    演算子を使ったフィルタ条件の記述方法 | AjaxTower

  • 以下の83 ~ 87行目のgetChildで指定しているcustomeremailtelcontentは、冒頭で書いた自動返信メールに設定したXMLマークアップを指定しています。


なお、このスクリプトがきちんと動作するかは、以下のようにメニューから直接実行することで確認できます。
execute_script

もちろん、これを毎回手動で実行するのは手間ですので、あとはこのスクリプトを一定の時間間隔で自動実行するよう設定します。

Google Apps Scriptを一定時間間隔で実行するための設定

以下のように、スクリプトエディタのメニュー内の「リソース」→「現在のプロジェクトのトリガー」をクリックします。
trigger_for_project

すると以下のような画面が表示されるので、「今すぐ追加するにはここをクリックしてください」という部分をクリックします。
click_here

後は以下のように好きなトリガーを指定します。お問い合わせメールが届く頻度にもよりますが、以下では10分毎にスクリプトを実行するようトリガを指定しています。
10minutes_trigger

まとめ

簡単なものではありますが、このようにお問い合わせメールを自動でスプレッドシートに保存して蓄積していくと後々便利です。間違いや他に良い方法がありましたらぜひコメントよろしくお願いします。

このエントリーをはてなブックマークに追加

SPONSORED LINK

この投稿へのコメント

コメントはありません。

コメントを残す

メールアドレスが公開されることはありません。

この投稿へのトラックバック

トラックバックはありません。

トラックバック URL