こんにちは。
キャスレーコンサルティングの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);終わりに
今回は、以上となります。
また機会があれば、続編を執筆したいと思います。
最後までお読み下さり、ありがとうございました!