JavaScriptについての記事

GASでGmailから複数のメール件名を検索してスプレッドシートに貼り付ける方法!

GASで複数のメール件名を検索してスプレッドシートに貼り付ける方法!

GASを使ってGmailのメール検索する際に複数の件名を検索する方法を紹介します。
一つではなく検索したい件名が複数の時まとめて検索できると便利ですよね。
それを今回はシンプルにスプレッドシートに貼り付ける方法なのですが、使いようによっては色々カスタマイズして柔軟に対応できるかと思います。

GASのコード

const nameArray = ['件名01','件名02','件名03','件名04','件名05'];
const mailTitle = [];

const dt = new Date();
dt.setDate(dt.getDate()-7);
const d7 = Utilities.formatDate(dt, 'Asia/Tokyo', 'yyyy/M/d');
const day = `after:${d7}`;

const newnameArray = nameArray.map(function(name){
    name =  `${day} subject:${name}`;
    return name;
});

for( let i= 0; i < newnameArray.length; i++) {

    let gmail = GmailApp.search(newnameArray[i]);

    for(let gmailItem of gmail){
      let threads = gmailItem;
      let mails = threads.getMessages();

      for(let i = 0; i < mails.length; i++){
        let mail = mails[i];
        let subject = mail.getSubject();
        mailTitle.push(subject);
      }
    }
}

const sheet = SpreadsheetApp.getActive().getActiveSheet();

let paste = sheet.getRange("A:A").getValues();
let pasteLastRow = paste.filter(String).length + 1;

for(let i = 0; i<mailTitle.length; i++) {
    sheet.getRange(paste,1).setValue(mailTitle[i]);
    paste++;
}

上記がGASで複数の件名を検索してスプレッドシートに貼り付けるコードです。

細かく説明していきますね。

検索したい件名を入れる配列と検索した後に使用する配列を用意

const nameArray = ['件名01','件名02','件名03','件名04','件名05'];
const mailTitle = [];

まずは検索したい件名を「配列nameArray」に記述します。
その下に用意した「配列mailTitle」は後ほど検索した際に使用するので空のまま作成しておきます。

subject:を件名の前に足す

const dt = new Date();
dt.setDate(dt.getDate()-7);
const d7 = Utilities.formatDate(dt, 'Asia/Tokyo', 'yyyy/M/d');
const day = `after:${d7}`;

const newnameArray = nameArray.map(function(name){
    name =  `${day} subject:${name}`;
    return name;
});

日付取得系は省略しますが、仮で1週間前からの取得にしてます。
mapメソッド「配列nameArray」の各件名の前に「subject:」と日付を追加します。

メールを検索

for( let i= 0; i < newnameArray.length; i++) {

    let gmail = GmailApp.search(newnameArray[i]);

    for(let gmailItem of gmail){
      let threads = gmailItem;
      let mails = threads.getMessages();

      for(let i = 0; i < mails.length; i++){
        let mail = mails[i];
        let subject = mail.getSubject();
        mailTitle.push(subject);
      }
    }
}

「配列nameArray」に対してfor文を回し、その中で件名で検索をします。
対象の件名に該当するメールを全て取得し、その中で件名だけ取り出して先程作成しておいた「配列mailTitle」にpushします。
この時点で「配列mailTitle」に取得したい全ての件名が保存されています。

スプレッドシートに貼り付ける

const sheet = SpreadsheetApp.getActive().getActiveSheet();

let paste = sheet.getRange("A:A").getValues();
let pasteLastRow = paste.filter(String).length + 1;

for(let i = 0; i<mailTitle.length; i++) {
    sheet.getRange(paste,1).setValue(mailTitle[i]);
    paste++;
}

SpreadsheetApp.getActive().getActiveSheet();で現在のシートを取得します。

let paste = sheet.getRange("A:A").getValues();
let pasteLastRow = paste.filter(String).length + 1;

と記述してシートの最終行を取得します。

for(let i = 0; i<mailTitle.length; i++) {
    sheet.getRange(paste,1).setValue(mailTitle[i]);
    paste++;
}

最後に配列mailTitleの要素を全てシートに貼り付けます。
以上が複数の件名をシートに貼り付ける方法です。

おわりに

細かく見ていけば複雑なコードではないので、今回紹介した方法以外でもっとシンプルにできるかもしれません。

GASを上手に使うことで業務効率化でき、空いた時間で別の作業ができますね。


GASは業務中の「効率化」が簡単に実装できるので、雑用作業で不毛な時間を消費する環境から抜け出すことができる素晴らしいサービスだと思います。