LANG SELRCT

コードを書く場所についてはこちら

2016年5月28日土曜日

Gmailのデータを取得する

GmailにあるデータをGoogle Apps Scriptで取り出すということをやってみました。
件名や本文、差し出し人などのデータを取得することができます。

まずは最新の2件の件名を取得してメッセージボックスに表示するということをやって、次にその2件の件名をシートに書き出すということをやってみました。
最後にラベルを指定して最新の2件をシートに書き出すということもやってみました。

スレッドに複数のメッセージがある場合は、それらも取得できるようにしています。


1. 最新の2件の件名をメッセージボックスに表示します

コード.gs

function getMail_subject() {
    var thread = GmailApp.getInboxThreads(0, 2); 
    var messages = GmailApp.getMessagesForThreads(thread);
    for (var i = 0; i < thread.length; i++) {
        for (var j = 0; j < messages[i].length; j++) {
            var subject = messages[i][j].getSubject();
            Browser.msgBox(subject);
        }
    }
}



実行すると最新のメールから1件ずつメッセージボックスに表示されます。
以下の例はこのコードを書いた時点での僕のGmailにあった最新2件の件名です。

まず最新の1件が表示されます。

OKをクリックすると次の1件が表示されます。



2. 最新の2件の件名をシートに書き出します

ここでは書き出すシート名を「シート1」としています。

コード.gs

function getMail_subject_write() {
    var ss = SpreadsheetApp.getActiveSpreadsheet();
    var sh = ss.getSheetByName("シート1"); //sheet_name
    var threads = GmailApp.getInboxThreads(0, 2); 
    var messages = GmailApp.getMessagesForThreads(threads);
    var row = sh.getRange("A:A").getValues().filter(String).length + 1;
    for (var i = 0; i < threads.length; i++) {
        for (var j = 0; j < messages[i].length; j++) {
            var subject = messages[i][j].getSubject();
            sh.getRange(row, 1).setValue(subject);
            row++;
        }
    }
}



実行すると、最新の2件の件名がシート1のA列に書き出されます。



3. ラベルを指定して最新の2件をシートに書き出します

LABEL名に指定したいラベル名を入力します。

コード.gs

function getMail_by_label() {
    var ss = SpreadsheetApp.getActiveSpreadsheet();
    var sh = ss.getSheetByName("シート1");
    var label = GmailApp.getUserLabelByName("LABEL名"); //label_name
    var threads = label.getThreads(0, 2);
    var messages = GmailApp.getMessagesForThreads(threads);
    var row = sh.getRange("A:A").getValues().filter(String).length + 1;
    for (var i = 0; i < threads.length; i++) {
        for (var j = 0; j < messages[i].length; j++) {
            var subject = messages[i][j].getSubject();
            sh.getRange(row, 1).setValue(subject);
            row++;
        }
    }
}


実行すると、指定したラベルの最新の2件の件名がシート1のA列に書き出されます。



おまけ

ここでは件名だけを取得しましたが、本文はgetBody()、差し出し人はgetFrom()で取得できます。
その他取得したい情報については公式サイトを御覧ください。

Class GmailMessage
https://developers.google.com/apps-script/reference/gmail/gmail-message#methods