【GAS】Gmail→スプレ/①件名を複数指定して取得する方法

GAS
GAS
この記事は約6分で読めます。
スポンサーリンク

今回は、前回記事を少しアップデートして、取得するメールの件名を複数指定した上でGmailからメールを取得してスプレに書き出す方法をご紹介します。

↓前回記事をご覧になってない方はまずはこの記事をご覧ください↓

【GAS】Gmailからスプレに特定の文字列を件名に含むメールを取得する方法

前回のおさらい

前回は、以下のように特定の文字列をメール件名に含むメールスレッドを取得して、日時と件名をスプレッドシートに取得する、というコードをご紹介しました。

そのコードがこちらですね。


//Gmail→スプレ/////
function getGmailToSpreadSheet() {
 // 書き出すスプレッドシートをIDとシート名で定義
 var ss = SpreadsheetApp.getActiveSpreadsheet();
 //「test」という名前のシートを取得してsheetに代入
 var sheet = ss.getSheetByName('test');

 //取得するメールタイトルを指定
 var mail_title = '"ご予約を受け付けました"';

 // Gmailから指定した条件に合うスレッド(メール)を取得
 var threads = GmailApp.search('subject:(' + mail_title + ') after:2021/4/1');
 Logger.log(threads);

 //A列の要素の数を取得して、A列に文字列の入っていない最終行を取得
 var lastRow = sheet.getRange("A:A").getValues().filter(String).length + 1;

 // 繰り返し処理
 for(var n in threads){
  var thread = threads[n];
  // メール内の該当スレッド全てをmsgs変数に格納
  var msgs = thread.getMessages();
  msgs
  for(m in msgs){
   var msg = msgs[m];
   var date = msg.getDate();
   var subject = msg.getSubject();
   var from = msg.getFrom();
   if(mail_title.match(/ご予約を受け付けました/)){
    sheet.getRange(lastRow,1).setValue(date);
    sheet.getRange(lastRow,2).setValue(subject);
    lastRow++
   }
  }
 }
}

今回はこれを少しだけアップデートする形で、取得するメールの件名を複数指定にしてみようと思います。

件名を複数指定にしてGASでメールをスプレに書き出す方法

それでは、GASを使ってGmailからメールの件名を複数指定してスプレに書き出す方法を見ていきましょう。

貼り付けるスクリプト

上記の既存のコードを以下のように少し修正します。

//Gmail→スプレ/////
function getGmailToSpreadSheet() {
  // 書き出すスプレッドシートをIDとシート名で定義
  var ss = SpreadsheetApp.getActiveSpreadsheet(); 
  //「test」という名前のシートを取得してsheetに代入
  var sheet = ss.getSheetByName('test');
    
  //取得するメールタイトルを指定
  var mail_title1 = '"ご予約を受け付けました"';
  var mail_title2 = '"キャンセル致しました"';
  var mail_title =mail_title1 + " OR " + mail_title2;
  
   // Gmailから指定した条件に合うスレッド(メール)を取得
  var threads = GmailApp.search('subject:(' + mail_title + ') after:2021/4/1'); 
  Logger.log(threads);
  
  //A列の要素の数を取得して、A列に文字列の入っていない最終行を取得
  var lastRow = sheet.getRange("A:A").getValues().filter(String).length + 1;
  
  // 繰り返し処理
  for(var n in threads){
    var thread = threads[n];
    // メール内の該当スレッド全てをmsgs変数に格納
    var msgs = thread.getMessages();
    msgs
    for(m in msgs){
      var msg = msgs[m];
      var date = msg.getDate();
      var subject = msg.getSubject();
      var from = msg.getFrom();
      if(mail_title.match(/ご予約を受け付けました|キャンセル致しました/)){
      sheet.getRange(lastRow,1).setValue(date);
      sheet.getRange(lastRow,2).setValue(subject);
      lastRow++
      }
    }
  }
}

差分比較

具体的な解説に入る前に、まずはコード全体でどう変わったかを見てみます。
差分比較ツールで見てみると、ハイライトされている2箇所が変更になってますね!

変更点の解説

変更点は上記でハイライトされている2箇所です。

まずはこの部分ですね。
以前のコードではmail_titleという変数に直接文字列を代入して検索をかけていましたが、mail_title1とmail_title2それぞれに指定したい文字列を代入し、そのOR条件を作ってmail_titleに代入するというステップを踏んでいます。

//取得するメールタイトルを指定
var mail_title1 = '"ご予約を受け付けました"';
var mail_title2 = '"キャンセル致しました"';
var mail_title =mail_title1 + " OR " + mail_title2;

2つ目はこの部分です。

if(mail_title.match(/ご予約を受け付けました|キャンセル致しました/)){

これは、mail_titleの中身が「ご予約を受け付けました」「キャンセル致しました」のどちらかに合致した場合に実行するという記述です。これまでは前者のみで判定していたので追加しました。

スクリプトを実行してみる

実際に実行してみるとこのように2種類のタイトルでメールを取得できているのがわかりますね!

まとめ

いかがでしたか。

プログラミング初心者の僕が先輩から学んだのは1つずつステップを踏んで解決して行くこと、どこに問題があるかを1つ1つクリアにして突き止めて対処法を考えることが大事ということでした。

このシリーズではその「ステップを踏むこと」を意識してステップごとに記事を書いていくので、少しでも難しいという印象が減れば嬉しいです。