2018/11/22

【GAS】Gmailに届いたメール内容をスプレッドシートに反映したい



こんにちは!Gmailもスプレッドシートも生活必需品になってしているtknria(@tknria0304)です!

立場上、部下や後輩から定型フォーマットの報告メールを送ってもらうのですが、これをひとつずつ開いて内容を確認するのがとても手間です。

この作業を簡単にしようと思うと、
 ・Gmailを検索する
 ・メールの本文を解析する
 ・必要な部分だけを抽出する
 ・スプレッドシートに書き込む
というステップを踏めば実現できます。

「Gmailを検索」ってスプレッドシート上からできるの??

そんなことを思っていましたが、いろいろ試してみるとできちゃいました。

ということで、今回はGmailからメール内容を引用してスプレッドシートに反映する方法をご紹介します。



Gmailとスプレッドシートを連携しよう


まずはスプレットシート上に、ボタンを用意し、スクリプトエディタを開いてください。
(わからない方は以前ご紹介した「まずGASを使ってみたい」という記事を参考にしてみてください。)

そして以下のコードをそのままコピペしてください。

function checkHRS() {

  var out_START = 5;  // 出力のスタート行を指定する

  // 報告メールに付けているラベル名を設定。ここでは「報連相」というラベルをメールに付けているとします。
  var Label = "報連相";

  // Gmail上で検索し、今回の報連相を取得
    var this_threads = GmailApp.search('label:' + Label);  // 日

  // このシート上に報連相の内容を出力
  for(var n in this_threads){
    var thd = this_threads[n];
    var msgs = thd.getMessages();
    var msg = msgs[msgs.length-1];
    var from = msg.getFrom();
    var date = msg.getDate();
    var title = msg.getSubject();
    var body = msg.getBody();
 
    sheet.getRange(out_START,1).setValue(date);
    sheet.getRange(out_START,2).setValue(from);
    sheet.getRange(out_START,3).setValue(title);
    sheet.getRange(out_START,4 + i).setValue(body);
    out_START++;
    Utilities.sleep(500);
  }
}

設定として、報告メールには「報連相」というラベルが付いているものとします。
このメールを、GmailApp.search()で検索して取得しています。

上記ではラベルだけで検索していますが、報告メールは毎日、毎週送ってもらうと思うので、日付も指定したくなります。
その場合は、

    var this_threads = GmailApp.search('label:' + Label + ' after:2018/11/21 before:2018/11/24');

というように、追加で条件を指定することができます。
(上記であれば、受信日が「2018年11月21日~24日」のメール、という条件を追加しています)

試しに、Gmailで「報連相」というラベル付きのメールをいくつか用意してテストしてみてください。
このコードをベースにすれば、いろんなことができるので、そちらも模索してみてください。


億劫なあとがき


いかがでしょうか。
余談ですが、コード内にある「HRS」というのは、以前某企業に勤めていたときに使われていた用語で、「報連相(HouRenSou)」を指します。
そのときの名残で未だに使ってしまいます笑



関連記事

・これからGASを始めたい!という方にはこちらの記事がオススメ
 → 億劫な細道「GAS まずGASを使ってみたい

・VBAやGASについてもっとざっくり知りたい方はこちらの記事がオススメ
 → 億劫な細道「VBAやGASを用いた業務効率化のススメ