【GAS】Gmailに送られた過去のメールから特定条件のメールを検索して取得する

★気に入ったらシェアをお願いします!


みなさん、こんにちは!
タカハシ(@ntakahashi0505)です。

みなさん、問い合わせの分析ってしていますか?

記録によると当サイトにContact Form 7によって問い合わせフォームを設置したのが、2015/6/9でした。

今は株式会社プランノーツのサイトの問い合わせフォームに集約していますが、ブログによるマーケティングをはじめてからもう10カ月。

ボチボチ問い合わせを頂いているのですが、これまでちゃんと集計をしていなかったんですよ…反省しているところです。

さて、とうことで今回から何回かに分けて

  1. 過去の問い合わせメールをスプレッドシートに取り込んで整理する
  2. Contact Form 7から送信されたメールをスプレッドシートに追加していく
  3. スプレッドシートを使って問い合わせの効果を分析する

など、問い合わせデータの蓄積と効果分析にまつわることを色々とやっていきたいと思います。

初回の今回は、Google Apps Scriptで過去の問い合わせメールを特定条件で検索して取り出す方法です。

では行ってみましょう。

Gmailで受信さえしていればGoogle App Scriptで色々できる

まずGmailを使っているというのが前提です。

Gmailであれば、Google Apps Scriptを使って様々な操作をすることができます。

以下の記事ではGoogle App ScriptでGmailを操作してメールを送る方法ですね。

初心者でも簡単!Google Apps ScriptでGmailを操作してメールを送る方法
Google Apps Scriptでメールマガジンを送るシステムを作りたいと思います。シリーズ初回の今回は、Google Apps ScriptでGmailを操作してメールを送る方法です。

逆にGmailに届いたメールであれば取得をしてくることができます。

会社のアドレスなどドメインがgmail.comでなくとも、Gmailをメーラーとして使うことができます。

1つのGmailアカウントで複数のメールアドレスをまとめて使えるようにする方法
会社、プライベートなどの複数のメールアドレス…実は1つのGmailアカウントでまとめて管理できます。別のメールアドレスをGmailで送受信する設定をする方法について、とってもわかりやすくお伝えします。

とにかくGmailで受信していればGoogle Apps Scriptでアレコレできるってわけです。

ぜひ、Gmailを使いましょう。

Gmailの問い合わせのメールのみを抽出する

さて、今回のお題ですが、Gmailに蓄積されている数々のメールの中から、サイトの問い合わせフォームから送られたもののみを選んで抽出します。

プラグインContact Form 7からの問い合わせについては、以下のような内容でWordPress管理者宛にメールが送られます。

Contact Form 7からの通知メール

どの部分を抽出条件として使うかなのですが

このメールは 株式会社プランノーツ (http://plannauts.co.jp) のお問い合わせフォームから送信されました

という部分ですかね。

ちなみにですが、ブログ開始当初はプランノーツ社のサイトがありませんでしたので

このメールは いつも隣にITのお仕事 (http://tonari-it.com) のお問い合わせフォームから送信されました

というメールも過去メールの中には存在しているようです。

ですから、この二つを条件に検索して引っ張ってくるのがよさそうですね。

例えばGmailの検索窓で以下のように入力して検索します。

(“このメールは 株式会社プランノーツ http://plannauts.co.jp のお問い合わせフォームから送信されました” OR “このメールは いつも隣にITのお仕事 http://tonari-it.com のお問い合わせフォームから送信されました”)

すると

Gmailで特定条件でメールを検索した結果

このように検索結果が表示されますね。

検索条件でOR条件にしたいときは「OR」で条件をつなげばOKです。また、スペースを含む文字列で検索したい場合はダブルクォーテーションで囲めばOKです。

これと同様の検索をGoogle Apps Scriptで実施出来れば良いということですね。

特定の文字列を含むメールを取り出すスクリプト

Google Apps Scriptで特定の文字列を含むメールを取り出すスクリプトを作ってみました。

ひとまずこれだけ…簡単そうですね。

以下解説をしていきますね。

searchメソッドでGmailから特定条件でスレッドを検索する

Gmailから特定条件のスレッドを検索するにはGmailApp.searchメソッドを使います。

GmailApp.search(検索条件, 開始スレッドのインデックス, 最大取得数)

と書きます。

開始スレッドのインデックスですが、今回はすべてのメールを検索してきたいので、0を指定しています。以前取得したスレッドは取得したくない、といったときはこの値をうまく設定するという使い方になると思います。

最大取得数ですが、仕様上500スレッドが最大になっていますが、以下記事の通り1日あたりのGmailの読み取り制限がありますので、抑えめに設定をしておくのが望ましいです。

Google Apps ScriptにおけるGmailの読み取り件数の制限とその対処法
Google Apps Scriptでメールを取得する際には、1日あたりのGmailの読み取り件数の制限があるので注意をしなければなりません。今回は、その制限の内容と対処法についてお伝えします。

また、おわかりだと思いますが、GmailApps.searchメソッドで取得できるものはスレッドの集まりになります。

getMessagesForThreadsでスレッドから個別のメールを取得する

Gmailをスレッド表示にしている方はご存知だと思いますが、Gmailではメールの一連の流れを「スレッド」というかたまりで管理してくれています。

最初のメールに対する返信、またそれに対する返信…といったやり取りは基本的に全部同じスレッドに紐づくことになります。

ですから、スレッドはいくつかのメールの集まりになります。

スレッドの集まりからメールをまとめて取得するにはGmailApp.getMessagesForThreadsメソッドを使います。

書き方は

GmailApp.getMessagesForThreads(スレッドの集まり)

です。メソッド名の通り、スレッドの集まりから含まれるメールを全て取得できるのですが、メールは二次元配列に格納されます。

例えば今回のスクリプトの例では

  • myMessages[0][0] →1番目のスレッドの1番目のメール
  • myMessages[0][1] →1番目のスレッドの2番目のメール(たぶん1回目の返信?)
  • myMessages[1][0] →2番目のスレッドの1番目のメール

といった感じになります。

実行結果

getSubjectメソッドはその名のとおり、メールの件名を取得できます。メールから色々と取得するのは、次回以降詳しく解説をしたいと思います。

本スクリプトでは各スレッドの配列番号0、つまり1番目のメールの件名をログ出力するというものです。

実行してみますと

Gmailから抽出したメールの件名をログ出力

このように取得できました。

まとめ

Google Apps Scriptで過去のGmailに送られたメールの中から特定の条件のメールを検索して取得する方法についてお伝えしました。

スレッドの考え方さえ理解できちゃえば簡単かなと思います。

さて、次回はログ出力ではなくてスプレッドシートに出力をしていきたいと思います。

【GAS】Gmailからメールを検索してスプレッドシートに書き出す
Gmailに届いたWordPressサイトからの問い合わせメールの分析を進めています。 今回はGoogle Apps ScriptでGmailから検索して取り出したメールたちをスプレッドシートに出力します。

どうぞお楽しみに!

連載目次:GASでGmailに届いた問い合わせメールを分析する

お仕事の現場では日々様々なメールが届きます。その中で重要なのが「問い合わせメール」ですね。このシリーズでは、Webサイトからの問い合わせメールを自動でスプレッドシートに取り込んだり、チャットワークに送る方法についてお伝えしていきます。
  1. 【GAS】Gmailに送られた過去のメールから特定条件のメールを検索して取得する
  2. 【GAS】Gmailからメールを検索してスプレッドシートに書き出す
  3. フリーランスの仕事はどこから来たか、独立して1年間の受注件数を全て晒す
  4. 【GAS】新たな問い合わせメールをGmailで取得しスプレッドシートに随時追加する
  5. 【GAS】Gmailに来た問い合わせをチャットワークに通知してかつタスク追加する
  6. Google Apps ScriptにおけるGmailの読み取り件数の制限とその対処法