
photo credit: Box of junk mail via photopin (license)
みなさん、こんにちは!
タカハシ(@ntakahashi0505)です。
みなさん、問い合わせの分析ってしていますか?
記録によると当サイトにContact Form 7によって問い合わせフォームを設置したのが、2015/6/9でした。
今は株式会社プランノーツのサイトの問い合わせフォームに集約していますが、ブログによるマーケティングをはじめてからもう10カ月。
ボチボチ問い合わせを頂いているのですが、これまでちゃんと集計をしていなかったんですよ…反省しているところです。
さて、とうことで今回から何回かに分けて
- 過去の問い合わせメールをスプレッドシートに取り込んで整理する
- Contact Form 7から送信されたメールをスプレッドシートに追加していく
- スプレッドシートを使って問い合わせの効果を分析する
など、問い合わせデータの蓄積と効果分析にまつわることを色々とやっていきたいと思います。
初回の今回は、Google Apps Scriptで過去の問い合わせメールを特定条件で検索して取り出す方法です。
では行ってみましょう。
Gmailで受信さえしていればGoogle App Scriptで色々できる
まずGmailを使っているというのが前提です。
Gmailであれば、Google Apps Scriptを使って様々な操作をすることができます。
以下の記事ではGoogle App ScriptでGmailを操作してメールを送る方法ですね。
逆にGmailに届いたメールであれば取得をしてくることができます。
会社のアドレスなどドメインがgmail.comでなくとも、Gmailをメーラーとして使うことができます。
とにかくGmailで受信していればGoogle Apps Scriptでアレコレできるってわけです。
ぜひ、Gmailを使いましょう。
Gmailの問い合わせのメールのみを抽出する
さて、今回のお題ですが、Gmailに蓄積されている数々のメールの中から、サイトの問い合わせフォームから送られたもののみを選んで抽出します。
プラグインContact Form 7からの問い合わせについては、以下のような内容でWordPress管理者宛にメールが送られます。
どの部分を抽出条件として使うかなのですが
このメールは 株式会社プランノーツ (http://plannauts.co.jp) のお問い合わせフォームから送信されました
という部分ですかね。
ちなみにですが、ブログ開始当初はプランノーツ社のサイトがありませんでしたので
このメールは いつも隣にITのお仕事 (http://tonari-it.com) のお問い合わせフォームから送信されました
というメールも過去メールの中には存在しているようです。
ですから、この二つを条件に検索して引っ張ってくるのがよさそうですね。
例えばGmailの検索窓で以下のように入力して検索します。
(“このメールは 株式会社プランノーツ http://plannauts.co.jp のお問い合わせフォームから送信されました” OR “このメールは いつも隣にITのお仕事 http://tonari-it.com のお問い合わせフォームから送信されました”)
すると
このように検索結果が表示されますね。
検索条件でOR条件にしたいときは「OR」で条件をつなげばOKです。また、スペースを含む文字列で検索したい場合はダブルクォーテーションで囲めばOKです。
これと同様の検索をGoogle Apps Scriptで実施出来れば良いということですね。
特定の文字列を含むメールを取り出すスクリプト
Google Apps Scriptで特定の文字列を含むメールを取り出すスクリプトを作ってみました。
function searchContactMail() { // Gmailの検索条件 var strTerms = '("このメールは 株式会社プランノーツ http://plannauts.co.jp のお問い合わせフォームから送信されました" OR ' + '"このメールは いつも隣にITのお仕事 http://tonari-it.com のお問い合わせフォームから送信されました")'; var myThreads = GmailApp.search(strTerms, 0, 500); //条件にマッチしたスレッドを検索して取得、最大500通と決まっている var myMessages = GmailApp.getMessagesForThreads(myThreads); //スレッドからメールを取得する →二次元配列で格納 for(var i=0;i < myMessages.length;i++){ Logger.log(myMessages[i][0].getSubject()); //各スレッドの1番目のメールの表題をログ出力 } }
ひとまずこれだけ…簡単そうですね。
以下解説をしていきますね。
Gmailから特定条件でスレッドを検索する
Gmailから特定条件のスレッドを検索するにはGmailApp.searchメソッドを使います。
GmailApp.search(検索条件, 開始スレッドのインデックス, 最大取得数)
と書きます。
開始スレッドのインデックスですが、今回はすべてのメールを検索してきたいので、0を指定しています。以前取得したスレッドは取得したくない、といったときはこの値をうまく設定するという使い方になると思います。
最大取得数ですが、仕様上500スレッドが最大になりますので、500と設定をしています。
おわかりだと思いますが、GmailApps.searchメソッドで取得できるものはスレッドの集まりになります。
スレッドから個別のメールを取得する
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番目のメールの件名をログ出力するというものです。
実行してみますと
このように取得できました。
まとめ
Google Apps Scriptで過去のGmailに送られたメールの中から特定の条件のメールを検索して取得する方法についてお伝えしました。
スレッドの考え方さえ理解できちゃえば簡単かなと思います。
さて、次回はログ出力ではなくてスプレッドシートに出力をしていきたいと思います。
どうぞお楽しみに!