ラベル名を表示する
Gmailのスレッドは、「ラベル」を追加して整理します。このラベルは、GmailLabelというオブジェクトとして用意されています。GmailからこのGmailLabelを取り出し、それを操作することで、メールにラベルを設定したり、特定ラベルのスレッドを調べたりできます。
まず、既にあるラベルを取り出す方法を知っておきましょう。これは2つのメソッドが用意されています。
全ラベルの配列を得る
GmailApp.getUserLabels();
指定した名前のラベルを得る
GmailApp.getUserLabelByName( 名前 );
これでGmailLabelオブジェクトを取り出すことができます。ラベルに関する情報は、このラベルのメソッドを利用します。とりあえず、ラベル名を取得するメソッドだけ覚えておきましょう。
《GmailLabel》.getName();
これで、Gmailからラベルを取り出せるようになりました。実際に簡単なスクリプトを作ってみましょう。全ラベル名をログに出力するサンプルを挙げておきます。
function allLabel() {
var labels = GmailApp.getUserLabels();
for(var n in labels) {
Logger.log(labels[n].getName());
}
}
実行したら、「表示」メニューから「ログ」を選んでログのダイアログを呼び出して下さい。Gmailのラベル名がすべて表示されます。
ラベルのスレッドを取り出す
ラベルは、スレッド単位で設定されます。あるラベルが設定されているスレッドは、GmailLabelのメソッドを使って得ることができます。
《GmailLabel》.getThreads();
《GmailLabel》.getThreads( 開始位置 , 終了位置 );
getThreadsは、そのラベルが設定されたスレッドの配列を返すものです。が、引数を何も指定しないと、すべてのスレッドを取り出そうとします。ラベルによっては、膨大な数のスレッドが用意されているはずですから、これはあまりいいやり方とはいえません。
そこで、取り出すスレッドの位置を指定して呼び出すやり方が一般的に用いられます。getThreadsの引数に、スレッド取得を開始する位置と、取り出す最後の位置を整数で指定します。
これも利用例を挙げておきましょう。「ショッピング」というラベルが設定されているスレッドを最新のものから最大10個取り出し、そのタイトルを表示します。
function getLabelThreads() {
var label = GmailApp.getUserLabelByName('ショッピング');
var threads = label.getThreads(0, 10);
for(var n in threads) {
Logger.log(threads[n].getFirstMessageSubject());
}
}
これを実行すると、「ショッピング」というラベルのスレッドを、新しいものから最大10個取り出し、タイトルを表示します。ここでは、getUserLabelByNameでショッピングのラベルを取得した後、以下のようにしてスレッドを取り出しています。
var threads = label.getThreads(0, 10);
getThreadsの引数にゼロと10を指定しています。これでもっとも新しいものから10個までスレッドを取り出すことができます。取り出すスレッドの数が増えるとアクセスにかかる時間も長くなるので、いきなり全部取り出そうとせず、適当な数で区切って処理するようにして下さい。
ラベルの中身をスプレッドシートに書き出す
このスクリプトの応用例として、前回やったGoogleスプレッドシートへの出力を行う機能を使い、特定のラベルのスレッドをスプレッドシートにまとめて書き出す、といったことも行えるようになります。やってみましょう。
function getLabelThreadsToSheet() {
var sheet = SpreadsheetApp.getActiveSheet();
var label = GmailApp.getUserLabelByName('ショッピング');
var threads = label.getThreads(0, 100);
var row_count = 1;
for(var n in threads) {
sheet.getRange(row_count++, 1).setValue(threads[n].getFirstMessageSubject());
}
}
これは、Googleスプレッドシートのスクリプトエディタを開いて記述して下さい。実行すると、現在開いているシートに「ショッピング」ラベルのスレッド名を最大100個まで書き出します。ラベルにまとめたメールを整理するようなときに役立ちますね。
ラベルを作って追加する
今度はラベルの作成とスレッドの追加をやってみましょう。これらの作業は、GmailAppとGmailLabelにメソッドとして用意されています。
ラベルの作成
変数 = GmailApp.createLabel( 名前 );
スレッドへラベルを追加する
《GmailLabel》.addToThread(《GmailThread》);
《GmailLabel》.addToThreads(《GmailThread配列》 );
createLabelは、引数に指定した名前のラベルを作成し、そのGmailLabelオブジェクトを返します。これでラベルを作り、得られたGmailLabelのaddToThreadなどでスレッドを追加すれば、特定のスレッドをラベルでまとめることができるようになります。
では、実際の利用例を挙げましょう。今日の日付のラベルを作成し、受信ボックスにあるメールにそのラベルを設定するスクリプトを作成してみます。
function createLabel(){
var d = new Date();
var lname = d.getFullYear() + '-' + (d.getMonth() + 1) + '-' + d.getDate();
var glabel = GmailApp.createLabel(lname);
var threads = GmailApp.getInboxThreads();
glabel.addToThreads(threads);
}
実行すると、年月日のラベルが作成され、そこに受信ボックスのメールが追加されます。例えば、2018年11月30日なら、「2018-11-30」というラベルが作成されるのです。「とりあえず今日届いたメールをどこかにまとめておきたい」というときに便利ですね!