スレッドのメッセージを取り出すには?
前回、受信ボックスなどから「スレッド」を取り出し利用する基本について説明しました。Gmailのメールはスレッドとしてまとめられており、その中に「メッセージ」として各メールが用意されていましたね。
スレッドは、GmailThreadというオブジェクトとして用意されています。その中にあるメッセージは、「GmailMessage」というオブジェクトとして扱われます。まずは、スレッドの中からメッセージを取り出す方法を覚えておきましょう。
《GmailThread》.getMessages();
getMessagesは、スレッドに含まれるメッセージをGmailMessageの配列として返すメソッドです。これで得られた配列から、forなどで1つずつ値を取り出して処理していけばいいのです。
GmailMessageの主なメソッド
GmailMessageには、メールの内容に関するメソッドが一通り用意されています。これらを使えば、メールの内容を調べることができます。基本的なメソッドとして、以下のものを頭に入れておけばいいでしょう。いずれも引数はなく、ただ呼び出すだけで使えます。
getFrom――送信元をStringで返す
getTo――送信先をStringで返す
getDate――送信された日時をDateオブジェクトで返す
getCc――CCの値をStringで返す
getBcc――BCCの値をStringで返す
getSubject――メールのタイトルをStringで返す
getBody――メールの本文をHTMLのソースコードとして取り出しStringで返す
getPlainBody――メールの本文を標準テキストとして取り出しStringで返す
ややわかりにくいのは、getBodyとgetPlainBodyでしょう。Gmailでは、メールの内容はHTMLでフォーマットされています。getBodyは、この「HTMLでフォーマットされたソースコード」として本文を取り出します。本文のテキストだけを取り出したい場合は、getPlainBodyを使います。
受信トレイのメールを一覧表示する
では、簡単な利用例を挙げましょう。受信トレイにあるメールのタイトルと送信元をログに出力するサンプルです。
function allMail() {
var threads = GmailApp.getInboxThreads();
for (var th in threads) {
var msgs = threads[th].getMessages();
for (var msg in msgs) {
Logger.log(msgs[msg].getSubject() + '(' + msgs[msg].getFrom() + ')');
}
}
}
スクリプトエディタからこれを実行し、「表示」メニューの「ログ」を選んでログのダイアログを表示してみて下さい。受信トレイにあるメールのタイトルと送信元アドレスがすべて表示されます。
ここでは、まずgetInboxThreadsで受信トレイのスレッドを配列として取り出し、forでそのスレッドからgetMessagesでメッセージの配列を取り出しています。後は、個々のメッセージからgetSubjectとgetFromでタイトルと送信元を取り出し表示していくだけです。メッセージを取り出すことができれば、後は必要な情報を簡単に得られるのがわかるでしょう。
スプレッドシートに書き出す!
メールの情報が取り出せるようになったら、それを活用する方法も考えないといけません。今までのように「メールにまとめて送信する」というだけではちょっと物足りませんね。
Google Apps Scriptの最大の魅力は、さまざまなG Suiteアプリを連携して動かせることです。そこで、送られてきたメールの情報を整理して、Googleスプレッドシートに書き出してみましょう。複数アプリを連携して動かす場合、アプリへのアクセスを許可する作業が必要になります。以下の手順で作業して下さい。
まず、Googleスプレッドシートを新たに開いて下さい。Googleドライブから新規スプレッドシートを作ると良いでしょう。開いたら名前をつけて保存しておきます。
スプレッドシートの「ツール」メニューから「スクリプトエディタ」を選んで、スクリプトエディタを開きます。そして以下のスクリプトを記述しましょう。
スクリプトを保存し、実行しましょう。「実行」メニューの「関数を実行」から「getAllMessages」を選んで下さい。
画面に「認証が必要です」とアラートが現れるので「許可を確認」ボタンを押します。
function getAllMessages() {
var sheet = SpreadsheetApp.getActiveSheet();
var threads = GmailApp.getInboxThreads();
var row_count = 1;
for (var th in threads) {
var msgs = threads[th].getMessages();
for (var msg in msgs) {
sheet.getRange(row_count, 1).setValue(msgs[msg].getFrom());
sheet.getRange(row_count, 2).setValue(msgs[msg].getTo());
sheet.getRange(row_count, 3).setValue(msgs[msg].getSubject());
sheet.getRange(row_count, 4).setValue(msgs[msg].getDate());
row_count++;
}
}
}
これでスクリプトが実行できるようになります。実行すると、Googleスプレッドシートに、受信トレイにあるメールの送信元・送信先・タイトル・送信日時といった情報が一覧表示されます。
スプレッドシートにデータをまとめられれば、後はいろいろとデータを利用できるでしょう。
スプレッドシートに書き出すには?
今回は、Googleスプレッドシートにデータを書き出しています。Googleスプレッドシートをスクリプトで利用するのは、実は意外と簡単です。単純に「指定したセルに値を書き出す」というだけなら、以下の2文だけ頭に入れておけばできるようになります。
シートを取り出す
変数 = SpreadsheetApp.getActiveSheet();
スプレッドシートから、現在開いているシート(Sheetオブジェクトというもの)を取り出します。
セルに値を書き出す
《Sheet》.getRange(行 , 列 ).setValue( 値 );
セルの指定は、Sheetの「getRange」というメソッドを使います。これは行と列の番号を引数に指定するだけです。これで、セルの範囲を表すRangeというオブジェクトが得られるので、その「setValue」メソッドを呼び出して値をセルに設定します。ちなみに「getValue」というメソッドを使えば、そのセルの値を取り出すこともできます。
スプレッドシートが使えるようになると、できることの幅もぐぐっと広がりますので、ぜひこの2文だけ覚えて、スプレッドシートを使えるようになりましょう。