こんにちは。
キャスレーコンサルティングのIntegrationTech部所属の鈴木です。

前回のブログ「Googleスプレッドシートにメールを取り込んでみた」の続編となります。

前回はGmailで受信したメールを、スプレッドシートに取り込む方法をご紹介しました。
今回は、実践に向けて機能を付加していきます。

一度取り込んだメールは次回から取り込まない

実際に、メールをスプレッドシートに取り込むのは、どんな時でしょうか。

例えば、メンバー数人でアラートメールの対応をするサポートチームであれば、
 ・どのアラートを誰が対応するのか
 ・また、未対応なのか対応済みなのか
などをスプレッドシートで一元管理することができます。

こんな時、同じメールを毎回一から取り込んでいては使い物になりません。
新着メールのみを取り込む、というようにしたいですよね。

どのようにするかと言うと、一度取り込んだメールにGmailのラベルを設定してしまいます。
そして、次回取り込み時に「ラベルが設定されていないメール」を検索して取り込むのです。

ちなみに、ラベルはスレッド単位で設定することになります。

スクリプト

前回のスクリプトは、以下でした。

var sheet = SpreadsheetApp.getActiveSheet();
var threads = GmailApp.search('from:sample@test.co.jp subject:"【サンプル】"');
for(var i=0; i<threads.length; i++){
  var thread = threads[i];
  var mails = thread.getMessages();
  for(var j=0; j<mails.length; j++){
    var mail = mails[j];
    sheet.appendRow([mail.getDate(), mail.getSubject(), mail.getBody()]);
  }
}

これを、以下のように変更します。
(変更箇所は★をつけた行です)

 var sheet = SpreadsheetApp.getActiveSheet();
★var label = GmailApp.getUserLabelByName("取込済");
★var threads = GmailApp.search('from:sample@test.co.jp subject:"【サンプル】" -label:"取込済"');
 for(var i=0; i<threads.length; i++){
   var thread = threads[i];
   var mails = thread.getMessages();
   for(var j=0; j<mails.length; j++){
     var mail = mails[j];
     sheet.appendRow([mail.getDate(), mail.getSubject(), mail.getBody()]);
   }
★  label.addToThread(thread);
 }

以下で、順に説明していきます。

①ラベル名を定義する

まずは、取り込んだメールに設定するためのラベル名を定義します。

//ラベル名を定義します。
var label = GmailApp.getUserLabelByName("取込済");

※ここでは、予めGmailで作成しておいたラベルを使用します。
 未作成のラベルを指定すると、スクリプト実行時にエラーになってしまいます。

②Gmailから、ラベルのついていないメールを検索する

メールの検索は前回でも使いましたが、今回は検索条件を1つ追加し、
「取込済」というラベルが付いたメールを、検索から除外しています。

//Gmailのメールを検索して配列で取得します。(threads[0], threads[1], …)
var threads = GmailApp.search('from:sample@test.co.jp subject:"【サンプル】" -label:"取込済"');

③スレッドへラベルを付ける

sheet.appendRow()でスプレッドシートへ転記した後で、そのスレッドへラベルをつけます。
※どうやら、ラベルをメールごとに設定することができないようなので、スレッドごとに設定しています。

//スレッドへラベルを付けます。
label.addToThread(thread);

終わりに

今回は、以上となります。

また機会があれば、続編を執筆したいと思います。
最後までお読み下さり、ありがとうございました!

鈴木 翼
CSVIT事業部 IntegrationTech部 鈴木 翼
入社5年目で、主に運用保守業務に携わってきました。業務効率化のためにメールの取り込みスクリプトを作成する機会があり、その経験を元にブログを書いています。