LANG SELRCT

Apps Script Reference  (Create: Create new Spreadsheet | Create new Apps Script

Thursday, February 28, 2019

GmailApp.searchでメールを検索してシートに書き出したい


Gmailで検索した結果を、指定したシートに書き出す手順を書いていきます。


STEP1
Gmailで右端の▼をクリックして


STEP2
検索条件を決めます
ここでは@googleから来たメールで
検索する期間を以下のように設定しておきます


STEP3
検索ボタンをクリックするとこのように検索結果が表示されます


STEP4
スプレッドシートを新規作成してスクリプトエディタを開きます


STEP5
以下のコード.gsの query に検索条件を入れて getMailByQuery() を実行します



コード.gs
/************************************
GmailをsearchQueryで検索した結果をシートに書き出す
************************************/
function getMailByQuery() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getSheetByName("シート1");
  setHeader(sheet);//一行目に見出しを入力する
  
  var query = 'after:2019/2/25 before:2019/2/28';//Gmailで検索したいメール
  var threads = GmailApp.search(query);//スレッドたちを取得
  Logger.log(threads[0].getMessages()[0].getSubject());//1スレッド目の最初のメッセージをログに出してみる
  for(var i = 0; i < threads.length; i++) {
    var thread = threads[i];//スレッドを一つずつ取得
    var messages = thread.getMessages();//スレッドのメッセージたちを取得
    var array = [];
    for(var j = 0; j < messages.length; j++) {
      var message = messages[j];//メッセージを一つずつ取得
      var subject = message.getSubject();//件名を取得
      var body = message.getPlainBody() //本文
      var date = message.getDate(); //送信日時
      array.push([subject, body, date])
    }
    setValues(sheet, array);
  }
}

/************************************
シートに入力する
************************************/
function setValues(sheet, array){
  var lastRow = sheet.getLastRow();
  var startRow = lastRow + 1;
  var startCol = 1;
  var numRows = array.length;
  var numCols = array[0].length;
  var range = sheet.getRange(startRow, startCol, numRows, numCols);
  range.setValues(array); 
}

/************************************
1行目に自動入力する
************************************/
function setHeader(sheet){
  var array = [
    "subject",
    "body",
    "date"
  ];
  var start_row = 1;
  var start_col = 1;
  var num_rows = 1;
  var num_cols = array.length;
  var range = sheet.getRange(start_row, start_col, num_rows, num_cols);
  range.setValues([array]); 
}


補足

実行するとこのような許可が求められます












参考

search(query)
https://developers.google.com/apps-script/reference/gmail/gmail-app#search(String)


Latest post

Google Apps Scriptでスライドのページを指定して複数の図形を追加したい(Google Apps Script)

Googleスライドのページを指定して、 複数の図形(とテキスト)を追加したくて書いたコードです。 Code.gs const values = [ "hello" , "hey" , "hi" ]; con...