GASでGmailをスプレッドシートにまとめる方法

動機

メールのラベル付けがめんどう.自動化できないかと思った.

 

方法

  1. スプレッドシートにGAS (Google Apps Script)でメールの情報をまとめる
  2. Pyhonでまとめた情報からメールをクラスタリングする
  3. クラスタリング結果をGmailに反映する  

今回書くこと

方法1で行ったことをまとめる.

 

手順

まず,スプレッドシートを新たに作成し,A・B・C列の一行目にそれぞれ,ヘッダーとして「id, subject, plainBody」と記入する.
次に,作成したスプレッドシートの上段にあるツールをクリックした際に表示されるスクリプトエディタをクリックし,スクリプトウィンドウを立ち上げる.
以下のコードを張り付ける.また,メールは一度に500件以上は取得できないようになっているため,500件以上集める場合には,取得するメールの日時期間を設定するなどが必要である.

function setInfoMail() {
  var sheet = SpreadsheetApp.getActiveSheet();
  Logger.log(sheet.getName());
  
  //YYYY/MM/DDは適宜,年月日に変更する
  var threads = GmailApp.search('after:YYYY/MM/DD', 0, 500);
  var message = '';
  var subject = '';
  var id = '';
  var plainBody;

  threads.forEach(function(thread, i, array) {
    message = thread.getMessages()[0];
    subject = message.getSubject();
    id = thread.getId();
    body = message.getBody();
    plainBody = message.getPlainBody();
    
    //複数回実行した際に,同じメールがスプレッドシートに記述されないようにする
    var settedId = sheet.getRange('A:A').getValues().flat();
    if (settedId.indexOf(id) == -1) {
      sheet.appendRow([id, subject, plainBody]);
    }  
  });
}

スクリプトウィンドウの上部にある「関数を選択」をクリックし,「setInfoMail」をクリックして選択する.
「▶」ボタンをクリックして,実行する.もし,実行が初回であれば,権限を与えるかどうかの確認が行われるため,承認する.
処理が終わるまで待ち,スプレッドシートを確認するとメールのIDと件名,本文がまとまっていることがわかる.