web

備忘録:Gmailで受け取った内容をGoogleスプレッドシートに自動で読み込んで管理する方法

gmailxspreedsheet

こんにちは!みぞれ(@xxmiz0rexx)です。
先日写真素材サイトを作ったとき、メールフォームから送られた『素材のリクエスト内容』が自動でGoogleスプレッドシートに入ったらラクだよな〜と思い、いろいろ調べて設定してみましたので備忘録がてら記事にまとめたいと思います。

必要なもの

  • サイトのメールフォーム
  • Gmailのアドレス
  • Googleスプレッドシート

まずはメールの仕分け設定から

ご存知の方も多いと思いますが、Gmailには条件を指定してメールをラベル分けする機能があります。
例えば、送信者のアドレスを条件にしたり、件名を条件にしたりといった感じです。
今回もスプレッドシートでメールを抽出するために、まずはその機能を利用してラベルをつけておきましょう。

Gmailのラベル管理

各自やりやすい条件でやってみてください。わたしは件名が『[GIRLY DROP]リクエスト』のものに『リクエスト』というラベルをつけるように設定してみました。振り分け設定については以下の記事が参考になると思います。

参考:4,溢れかえるGmailの受信トレイを「メールの自動振り分け設定」でスッキリ! | 情報環境コミュニケーションズ はてなブックマーク - 4,溢れかえるGmailの受信トレイを「メールの自動振り分け設定」でスッキリ! | 情報環境コミュニケーションズ

Googleスプレッドシートを用意しよう

ラベルの設定が終わったら、次はスプレッドシートの用意をしましょう。

メール管理専用のスプレッドシートを新規作成する

Googleにログインした状態でGoogleスプレッドシートのページにいきます。画面右下に「+」マークがあるので、それを押すと新しいスプレッドシートを作ることができます。

スプレッドシートを新規作成する

ちなみに、Googleスプレッドシートとは無料で利用できる表管理のWEBアプリケーションです。
使い勝手がExcelに近く、共有やグループでの同時編集が簡単にできるので仕事でも結構使っています。

管理しやすいようスプレッドシートの見た目を整える

自分が見るだけなので見た目はそんなに凝らなくて良いのですが、見やすいように少し整えておきましょう。わたしはめっちゃテキトーですw

管理用のスプレッドシートを作成する

1.項目を決めよう

まずはどんな項目を取得するかを決めましょう。私の場合は今回リクエスト内容の管理なので『日付』と『内容』のみにしましたが、お問い合わせの場合は『名前』『メールアドレス』など内容の中でさらに区切る必要があるので、そういった場合は以下の記事を参考にしてみてください。

参考:Gmailで受信した内容をスプレッドシートに転記する〜! – クリームソーダ浴びたい はてなブックマーク - Gmailで受信した内容をスプレッドシートに転記する〜! - クリームソーダ浴びたい

2.見やすいようにセルの高さや色を調整しよう

あとは見た目(デザイン)ですが、ここはそこまでこだわらなくてOKです。
罫線のありなしや、背景色、文字色なんかを調整してください。

3.完成!

これで見た目の調整は完了です。次はこのスプレッドシートに自動取得用のスクリプト(Google App Script)を書いていきます。

Google App Scriptを書く

スプレッドシートの画面上部にメニューがあると思います。
その中の『ツール』から『スクリプトエディタ』を選択し、スクリプトの編集画面に行きましょう。

スクリプトエディタ

すると、以下のようにダイアログが出るので、今回は『空のプロジェクト』を選択します。

空のプロジェクトを選択

まっさらな編集画面が出てくるので、ここにコードを書いていきましょー!(*´∨`*)名前が無題のプロジェクトになっているので、一応わかりやすい名前をつけておいてください。

空のプロジェクト

中身は以下のスクリプトをコピペ&カスタマイズすればOK。

Google App Script
function getMail(){
  var sheet = SpreadsheetApp.getActiveSheet();
  var start = 0;
  var max = 500;
  var threads = GmailApp.search('label:Gmailでつけたラベル名 is:unread',start,max);
  var row = sheet.getLastRow() + 1;
  
  for(var n in threads){
    var the = threads[n];
    
    var msgs = the.getMessages();
    for(m in msgs){
      var msg = msgs[m];
      var body = msg.getBody()
      //↓管理に不要な文字をreplaceを使って削除します
      .replace('このメールは GIRLY DROP (http://girlydrop.com) のお問い合わせフォームから送信されました','')
      .replace('<br />','')
      .replace('\n','');

      var date = msg.getDate();

      sheet.getRange(row,1).setValue(date);//一列目に日付
      sheet.getRange(row,2).setValue(body);//二列目に内容
      the.markRead();
      row++;
    }
    Utilities.sleep(1000);
  }
}

Google-App-Script

こんな感じになると思います。

サンプルコード内に//↓管理に不要な文字をreplaceを使って削除しますとありますが、ここでスプレッドシートにはいってほしくない文字列を指定してreplaceしています。このへんは各自カスタマイズしてください。

このコードでやっている処理

処理を簡単に説明しておくと、指定したラベルがついたメールの中で『未読』のものを取得
スプレッドシートに書き込んで『既読』にしています。こうしておけば、二重で書き込んだりはしない…はず。

自動で実行させるには?

さて。一生懸命スクリプトを書いたわけですが、実はこれだけでは自動取得にはなりません。先ほどのスクリプトにトリガーを設定することで、はじめて自動実行が可能になります。

メニューの下にアイコンが並んでいるので、そこから『現在のプロジェクトのトリガー』をクリックしてください。

現在のプロジェクトのトリガー

クリックするとこんな画面が。ここで設定した時間ごとに自動でメールを見に行ってくれます。

トリガー設定

私は1時間にしてみました。そんなに頻繁にチェックしないのなら24時間でも良いと思います。

完成!!

はい!以上で設定は完成です(*´∨`*)b 実用前に、試しにメールフォームからテストメールを送信してみてください。

サイトによって項目が違うので各自でカスタマイズが必要になる場合も多々あると思いますが、そのときに少しでも参考になれば幸いでございます。このシステムでメール管理が楽になるといいですね!
以上、みぞれでした!

おまけ

このリクエストしたの誰ですか?
怒らないから出てきなさい

おいとっきーさん