LoginSignup
0
2

More than 3 years have passed since last update.

GoogleAppsScriptを使って検索条件に当てはまるメールの情報をスプレッドシートに取得する

Posted at

久々にスクリプト組んだのでメモ兼で残しときます。
マークダウン記法も久々

やりたいこと

特定の送信者からの定形メールを過去に渡ってその日時を取得したいという監査的な仕事です。
メール1つ1つ開いて時間を転記するなんてやってられないのでGAS使って取得したかったです。

コード全文

忘れないうちにコピペ

コード.gs
function getMailInfo(){
/*---------------------------
  1. 検索情報の設定
---------------------------*/

// 検索範囲を設定
  const configSheet =SpreadsheetApp.getActiveSpreadsheet().getSheetByName("条件設定");

  const start = 0;
  const max = 500; //検索数上限(デフォは500)

// 検索条件をセット
  const mFrom = "from:" + configSheet.getRange(1,2).getValue(); // from検索
  const mSubject = "subject:" + configSheet.getRange(2,2).getValue(); // 件名検索
  const query = mSubject + " " + mFrom; // 検索条件をセット

/*---------------------------
  2. 検索の実行
---------------------------*/
  // 検索メソッドを実行しスレッドを配列へ
  const threads = GmailApp.search(query,start,max);
  // スレッドの配列をメッセージの配列へ変換
  const messagesForThreads = GmailApp.getMessagesForThreads(threads);

  const messageValues = [];

  // 各メッセージから情報を取得、recordへpush していく
  for(const messages of messagesForThreads){
    const message = messages[0];

    const record = [
      message.getDate(),
      message.getFrom(),
      message.getSubject()
    ];

    messageValues.push(record);

  }

/*---------------------------
  3. スプレッドシートに転記する
---------------------------*/
// 転記するシート情報を設定
  const sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("取得結果");
  const lastRow = sheet.getLastRow();

// 転記
  sheet.getRange(lastRow+1,1,messageValues.length, messageValues[0].length).setValues(messageValues);

}

1.検索情報の設定

一度きりじゃなくて、似た内容でまた検索する可能性も考慮して、設定(fromと件名)シートと情報を記入するシートは分けました。
B1セルにfrom(送信元メールアドレス)
B2セルにSubject(件名)
を入れるような仕組み

Gmailは仕様上、一度にsearchメソッドで取得出来るのは500件、一日で20,000件が上限らしい。
コードでは上限の500にしてるけど、そんなにヒットしないなら100とか200とかにしといたほうが良さそうです。

2.検索の実行

searchで取得してくるのは個別のメールではなくて、まずはスレッド(threads)のようです。個別のメールはmessagesというものらしく、スレッドから取得してくる必要があるらしいです。
だからsearchしてからgetMessagesForThreadsしてます。

あとはfor~of~で1つ1つ取り出しては配列にまとめています。

3.スプレッドシートに転記する

あとは簡単。毎度おなじみでgetRangeしてsetValuesしていきます。

補足など

Javascriptはletconstで学んだのでGoogleAppsScriptでも使えるのはなんだか嬉しいです!

アラートやエラー回避などなど全くなにもやってないので必要なときにまたやります。

0
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
2