Gmailにアクセスする (5/7)
作成:2011-07-13 08:20
更新:2011-11-04 16:39
更新:2011-11-04 16:39
■GmailMessageオブジェクトについて
Gmailの個々のメール(メッセージ)を管理するために用意されているのが「GmailMessage」というオブジェクトです。メッセージを扱う場合は、GmailAppかGmailThreadから操作したいメッセージのGmailMessageを取得し、そのオブジェクト内のメソッドを呼び出して処理を行う、という流れになります。
このGmailMessageに用意されているメソッド類は、大きく分けて2通りあります。GmailThreadに用意されていたのと同じように、メッセージの設定情報に関するもの。そして、メッセージ独自のもの(メッセージの内容に関するもの)です。まずは設定情報に関するメソッドから整理しましょう。
・メッセージの状態をチェックする
・メッセージの状態を設定する
これらは、ほぼ同じものがGmailThreadにも用意されていましたからそれほど頭を悩ませるものでもないでしょう。前半の「is○○」というものは設定の値を真偽値で取り出すものです。それらの値を変更する場合は、後半にまとめてあるメソッド類を呼び出します。非常にシンプルですね。
ちょっと意外なのは、メッセージのトレイ移動に関するものが、ゴミ箱に移動するmoveToTrashしかないことです。例えばスパムに移動する場合、メールではなくスレッド単位で移動することになりますから、GmailMessageにはないのでしょう。
続いて、そのメッセージの内容に関するメソッド類です。これは、基本的に情報を取得するもののみで、変更するためのものはありません(届いたメッセージの内容を変更することはありませんから)。
・メッセージの情報を取得する
基本的に、getAttachments以外はテキストとして値が取得されます。getAttachmentsは、「Blob」というバイナリデータを管理するオブジェクトの配列として取り出されます。Blobオブジェクトにはバイナリデータをbyte配列として取得する「getBytes」といったメソッドがありますので、それを利用してデータをバイナリファイルとして保存するなどの利用ができるでしょう。
さあ、ここまで来れば、一番最初に掲載した「受信箱の内容をスプレッドシートに書き出すサンプル」の内容がほぼ理解できますね。一通りの流れからポイントを絞って調べてみましょう。
・受信箱のスレッドの取得
・スレッドからのメッセージの取得
・メッセージの情報の取得
GmailAppからGmailThreadを取得し、そこから更にGmailMessageを取得する。そして必要に応じてそれぞれの情報を取り出して処理する。この3つのオブジェクトのつながりがわかれば、Gmailの利用はそれほど難しくはないことがわかるでしょう。
このGmailMessageに用意されているメソッド類は、大きく分けて2通りあります。GmailThreadに用意されていたのと同じように、メッセージの設定情報に関するもの。そして、メッセージ独自のもの(メッセージの内容に関するもの)です。まずは設定情報に関するメソッドから整理しましょう。
・メッセージの状態をチェックする
変数 =《GmailMessage》.isUnread();
変数 =《GmailMessage》.isStarred();
変数 =《GmailMessage》.isInInbox();
変数 =《GmailMessage》.isInChats();
変数 =《GmailMessage》.isInTrash();
・メッセージの状態を設定する
《GmailMessage》.mardRead();
《GmailMessage》.markUnread();
《GmailMessage》.star();
《GmailMessage》.unstar();
《GmailMessage》.moveToTrash();
これらは、ほぼ同じものがGmailThreadにも用意されていましたからそれほど頭を悩ませるものでもないでしょう。前半の「is○○」というものは設定の値を真偽値で取り出すものです。それらの値を変更する場合は、後半にまとめてあるメソッド類を呼び出します。非常にシンプルですね。
ちょっと意外なのは、メッセージのトレイ移動に関するものが、ゴミ箱に移動するmoveToTrashしかないことです。例えばスパムに移動する場合、メールではなくスレッド単位で移動することになりますから、GmailMessageにはないのでしょう。
続いて、そのメッセージの内容に関するメソッド類です。これは、基本的に情報を取得するもののみで、変更するためのものはありません(届いたメッセージの内容を変更することはありませんから)。
・メッセージの情報を取得する
変数 =《GmailMessage》.getFrom();
変数 =《GmailMessage》.getTo();
変数 =《GmailMessage》.getCc();
変数 =《GmailMessage》.getReplyTo();
変数 =《GmailMessage》.getDate();
変数 =《GmailMessage》.getThread();
変数 =《GmailMessage》.getBody();
変数 =《GmailMessage》.getAttachments();
基本的に、getAttachments以外はテキストとして値が取得されます。getAttachmentsは、「Blob」というバイナリデータを管理するオブジェクトの配列として取り出されます。Blobオブジェクトにはバイナリデータをbyte配列として取得する「getBytes」といったメソッドがありますので、それを利用してデータをバイナリファイルとして保存するなどの利用ができるでしょう。
さあ、ここまで来れば、一番最初に掲載した「受信箱の内容をスプレッドシートに書き出すサンプル」の内容がほぼ理解できますね。一通りの流れからポイントを絞って調べてみましょう。
・受信箱のスレッドの取得
var thds = GmailApp.getInboxThreads();
・スレッドからのメッセージの取得
var msgs = thd.getMessages();
・メッセージの情報の取得
var from = msg.getFrom();
var to = msg.getTo();
var date = msg.getDate();
var subject = msg.getSubject();
var body = msg.getBody();
GmailAppからGmailThreadを取得し、そこから更にGmailMessageを取得する。そして必要に応じてそれぞれの情報を取り出して処理する。この3つのオブジェクトのつながりがわかれば、Gmailの利用はそれほど難しくはないことがわかるでしょう。
(by. SYODA-Tuyano.)
※プログラムリストが表示されない場合
AddBlockなどの広告ブロックツールがONになっていると、プログラムリスト等が表示されない場合があります。これらのツールをOFFにしてみてください。
●プログラム・リスト●
※最初に掲載した、受信箱のメッセージを スプレッドシートに書き出すサンプル var sheet = SpreadsheetApp.getActiveSheet(); var thds = GmailApp.getInboxThreads(); var row = 1; for(var n in thds){ var thd = thds[n]; sheet.getRange(row++,1).setValue(thd.getMessageCount()); var msgs = thd.getMessages(); for(m in msgs){ var msg = msgs[m]; var from = msg.getFrom(); var to = msg.getTo(); var date = msg.getDate(); var subject = msg.getSubject(); var body = msg.getBody(); sheet.getRange(row,1).setValue(date); sheet.getRange(row,2).setValue(from); sheet.getRange(row,3).setValue(to); sheet.getRange(row,4).setValue(subject); //sheet.getRange(row,5).setValue(body); // カット! row++; } }
※関連コンテンツ
「初心者のためのGoogle Apps Scriptプログラミング入門」に戻る