非IT企業に勤める中年サラリーマンのIT日記

非IT企業でしかもITとは全く関係ない部署にいる中年エンジニア。唯一の趣味がプログラミングという”自称”プログラマー。

GAS:Gmailの特定タイトルで未読のメールの内容をスプレッドシートに展開する

   

クラウドワークスで見つけた案件を勝手に検討して作ってみました。(なんだかシリーズ化しそう…)

仕様

仕様は以下のとおりです。応募していないのですべての仕様を読み取ることはできず一部作文しています。まあ当たらずとも遠からずかなと。

  • 特定のメール(例:注文メール)が届いたらスプレッドシート上に展開する。
  • メールのタイトルには特定の文字が付与されている。
  • シートに展開したら既読にする。

 

実行結果

実行結果を先に説明します。

例えば以下のような特定のメール(タイトルに[GAS-TEST]と書かれている)があったとします。注文メールのようにWebページ上のフォームなどから送られてくる機械的なメールを想定しています。このメールは未読であるとします。

 

このメールをGAS側で取得してスプデッドシートに以下のように展開させます。[タイトル][受信日時][送信者メールアドレス][メール本文]がそれぞれセルに展開されます。

 

その後スプレッドシートに展開されたメールは自動で既読にします。

 

ざっくりこんな感じの流れとなります。

ソースコード

ソースコードはこちらです。今回はメール本文をそのままセルに転記していますが、定形メールであればその中身を解析してセルに分解することも可能です。

function getMail() {
  var sheet = SpreadsheetApp.getActiveSheet();
  sheet.getRange("A2:D1000").clearContent();

  //Gmailの検索条件(未読+特定文字が含まれたタイトル)
  var filter = 'is:unread subject:(GAS-TEST)';
  var threads = GmailApp.search(filter);
 
  var r = 2;
  for (var i = 0 ; i < threads.length; i++) {
    var msgs = GmailApp.getMessagesForThread(threads[i]);
 
    for (var j = 0; j < msgs.length; j++) {
      // シートに展開
      sheet.getRange(r,1).setValue(msgs[j].getSubject());
      sheet.getRange(r,2).setValue(msgs[j].getDate());
      sheet.getRange(r,3).setValue(msgs[j].getFrom());
      sheet.getRange(r,4).setValue(msgs[j].getPlainBody());
      r++;
    }
 
    // 既読にする
    threads[i].markRead();
  }
}
 

 

 

スポンサーリンク

 - Google Apps Script