GAS Gmailから抽出しスプレッドシートに貼付

GAS(Google Apps Script)のGmailから受信日時のfrom-toを条件にして抽出しGoogleスプレッドシートに貼付するサンプルです。

目次

サンプル Googleスプレッドシートを準備する
  from-toの日時を指定する
  from-toを時分秒まで指定する(UNIX時間)
  メールの作成日時の確認方法

Googleスプレッドシートを準備する

1.Googleスプレッドシートを新規作成します。

Gmailから受信日時とメールタイトルを指定して対象を抽出し、Google スプレッドシートのA3から下の列に作成日時(※)、B3から下の列にメールタイトルを貼り付けます。

※getDate()を使用すると作成日時が取得されます。

 

2.コードを作成するのでApps Scriptを開きます。

Google スプレッドシートの拡張機能からApps Scriptをクリックします。

 

from-toの日時を指定する

function testScript() {
  // シートの取得と指定範囲のクリア
  const sheet = SpreadsheetApp.getActiveSheet();
  let line = 3;
  sheet.getRange(line,1,50,2).clear();

  // 受信日時のfrom-toとタイトルで対象のメールを取得 
  const threads = GmailApp.search('subject:"テストタイトル" after:2022/6/27 before:2022/7/13', 0, 30);
  let messages = "";

  // 受信日とメールのタイトルを取得
  for (let i = 0; i < threads.length; i++) {
    messages = threads[i].getMessages();

    for (let j = 0; j < 1; j++) {
    //for (let j = 0; j < messages.length; j++) {
      sheet.getRange(line,1).setValue(messages[j].getDate()); //メールの作成日時
      sheet.getRange(line,2).setValue(messages[j].getSubject()); 
      line = line + 1;
    }
  }
}

GmailApp.searchの構文は以下です。

GmailApp.search( 'クエリ'  [,開始位置,取得数] )

クエリで取得する条件を指定します。
subject:はメールタイトル、after:は受信日時のfrom、before:は受信日時のtoです。
subject,after,beforeはそれぞれ無くても問題ありません。

開始位置は数値で指定します。0を指定しています。
取得数も数値で指定します。最大30件としています。

上記の日時の指定の場合、2022/6/27 9:00:00から2022/7/13 9:00:00という意味になります。

15行目は、スレッドの先頭のみ取得するため1にしています。
16行目の場合は、スレッドの子のメールも取得します。

https://developers.google.com/apps-script/reference/gmail/gmail-app

https://support.google.com/mail/answer/7190?hl=ja

 

from-toを時分秒まで指定する(UNIX時間)

function testScript() {
  // シートの取得と指定範囲のクリア
  const sheet = SpreadsheetApp.getActiveSheet();
  let line = 3;
  sheet.getRange(line,1,50,2).clear();
  
  // from日時
  const d1 = new Date(2022,5,27,22,47); // 5は6月を表す (2022/6/27 22:47:00から)
  const d2 = new Date(d1.getTime());
  const fromDate = Math.floor(d2/1000).toString(); // ミリ秒を秒に変換

  // to日時
  const d3 = new Date(2022,6,13,13,35,31); // 6は7月を表す (2022/7/13 13:35:31まで)
  const d4 = new Date(d3.getTime());
  const toDate = Math.floor(d4/1000).toString(); // ミリ秒を秒に変換

  const query = 'subject:"テストタイトル" after:' + fromDate + ' before:' + toDate;

  // 受信日時とタイトルで対象のメールを取得 
  const threads = GmailApp.search(query, 0, 30);
  let messages = "";

  // 受信日とメールのタイトルを取得
  for (let i = 0; i < threads.length; i++) {
    messages = threads[i].getMessages();

    for (let j = 0; j < 1; j++) {
    //for (let j = 0; j < messages.length; j++) {
      sheet.getRange(line,1).setValue(messages[j].getDate()); //メールの作成日時が表示される
      sheet.getRange(line,2).setValue(messages[j].getSubject()); 
      line = line + 1;
    }
  }
}

8-10行目と13-15行目はUNIX時間で指定しています。
UNIX時間とは、協定世界時(UTC)の1970年1月1日午前0時0分0秒からの経過秒数です。

 

メールの作成日時の確認方法

1.メールを開き、右上のアイコンをクリックしメッセージのソースを表示をクリックします。

 

2.作成日とその後の配信の秒数が表示されます。

関連の記事

GAS substring 文字列を切り出す(Google Apps Script)

△上に戻る