はじめに
GAS を用いて、1分おきにメールをチェックして、ある条件を満たしたメールから必要な情報を抽出してスプレッドシートに書き込む方法について紹介します。
簡単な方針解説
言葉にするとかえって難解になるかもしれませんが、大きくは3ステップ程度です。
- ログを取り専用のスプレッドシートを作成し、機能拡張 --> Apps Script を作成する。必ず、スプレッドシートから GAS を作成すること。それにより、それを呼び出したスプレッドシートに紐づけられたGASが出来上がる。
- 下記を参考に GAS をコーディングする。ここでのポイントは、最近の未読メールから10件検索し、ある条件を満たした場合にその情報をスプレッドシートに保存し、そのメールを既読にすること。これにより、ダブルカウントを防ぐ。
- GASの設定で、「イベントソースの選択」で「時間主導型」にして、「時間感覚の設定を1分おき」にする。
以下、具体例で紹介します。
簡単な例
ここでは、"Zoom responsecheck" という件名のメールを見つけたらその内容をスプレッドシートに書き出す、という簡単な例を紹介します。
GASのコーディング
など参考にさせていただきました。
function myFunction(){
//件名に、「Zoom connection information」の文字列を検索条件に指定して抽出命令
let query = 'is:unread subject:(Zoom responsecheck)'; // is:unread で未読メール限定とする
let gmail = getGmail(query);
if (gmail.length > 0){ // 一件以上ヒットした場合のみ実行
//スプレッドシートに書き出し
let sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
let lastRow = sheet.getLastRow();
let row = gmail.length;
let col = gmail[0].length;
let range = sheet.getRange(lastRow+1, 1, row, col);
range.setValues(gmail);
}
}
function getGmail(query){
//新着メール情報を格納する配列を宣言
let array = [];
//Gmailの履歴からマッチするメールをスレッド化、最新の10通を取得
let threads = GmailApp.search(query,0,10);
//一覧化したメールの件数分繰り返し
threads.forEach(function(thread) {
// スレッド内のメール一覧を取得
let messages = thread.getMessages();
// メールを一つずつ取り出す
messages.forEach(function(message) {
//メール受信日の取得
let date = message.getDate();
date = Utilities.formatDate(date, 'Asia/Tokyo', 'yyyy/MM/dd HH:mm:ss');
// メール本文の取得
let plainBody = message.getPlainBody();
array.push([date, plainBody]); //受信日と本文の組を配列に追加
})
thread.markRead() // 未読を既読に変更。これで次に is:read で検索されない。
})
return array;
}
検索部分は、
let query = 'is:unread subject:(Zoom responsecheck)'
で、is:unread で未読メール限定とした上で、subject: で、件名に限定し、(Zoom responsecheck) という文字列が続いているものを検索します。丸括弧()がないと意味が変わってしまうので注意です。丸括弧があることで、連続した文字列という意味になり、丸括弧がないと and の検索条件になります。
トリガーの設定
トリガーの設定で、1分おき、を選びます。
実行例
Zoom responsecheck というタイトルで、本文が テスト1, テスト2 というメールを送ると、
のように追記されます。
注意点
未読メールに対して検索をかけて、ヒットしたら既読にする、ことでダブルカウントを防いでいます。もし、未読のままにしたい場合は、スプレッドシートの中身と照合するなど別の方法でダブルカウントを防ぐ方が良いです。
関連記事
GASの使い方などは割愛しています。他のページを参照ください。