これだけやればOK!「メールに気づかず機会損失」を防ぐGmail整理自動化設定まとめ。

31
  • HOME
  • CONTENTS
  • 仕事術
  • これだけやればOK!「メールに気づかず機会損失」を防ぐGmail整理自動化設定まとめ。

フリーランスになってからメールの管理はGmailで行なっています。
複数のメールアドレスも一括で確認できて凄く便利ですよね。
それを「全受信フォルダ」でメールを確認し管理している人も多いのではないでしょうか。

増えていくメールの種類。
中には毎回見ていないメールも入っています。

実は「全受信フォルダ」だけをチェックするのは危険です。

全受信フォルダはフィルターがかかっており、全部のメールがそこに表示されているわけではありません。大切なメールが埋もれてしまったり、受信に後から気づく危険性もあります。

メールを見やすく管理して、整理や削除などの煩雑な雑務も自動化できると楽になります。

そこでGmailの受信フォルダの管理を徹底対策。
自動化にあたり、いろんな設定をする必要があったのでまとめました!

『ラベル』で分類。過去のメールも自動振り分けしよう!

gmailは「メールアドレス」「特定の文字を含む」など様々な条件分岐をして、受信したメールに『ラベル』を付けてくれます。項目ごとに書類に付箋をつけてくれるイメージです。
ここでは、振り分け設定しながら同時にラベルも作る方法をお伝えします。

〔 1 〕振り分けをしたいメールを開いて、右上にある「︙」(その他)のアイコンを選択します。

〔 2 〕「メールの自動振り分け設定」を選択します。

〔 3 〕「メールアドレス」の他に「To」「件名」「含む」「含まない」で条件分岐ができます。
    私は同じメールアドレスでも、メールの文末に入る定型文を「含む」に入れて、サイトからの問合せを条件分岐させたりしています。
条件を入力して「フィルタを設定」を選択します。

〔 4 〕「メールが検索条件と完全一致する場合」の処理を設定します。
下記、項目にチェックを付けます。

| CHECK 1 |
ラベルを付ける
「ラベルを選択…」を押すとその下の「新しいラベル」から新規ラベルを作成できます。
または、その下に表示されるの既存のラベルから選択します。

名前をつける時に、おすすめなのがタイトルの前に「数字」をつけることです。
わたしは「1-0__ラベル名」「2-1__ラベル名」にしています。
そうすると、ラベルが優先順位順に表示されるので見やすくなります。
1の中でもレベルを分けることによって、ラベルの追加や順位替えが楽になります。

※ラベル名の中に「スペース」は入れないようにします。
 後述の自動削除スクリプトで「2-1 | ラベル名」だと認識されず、弾かれてしまいました。

| CHECK 2 |
一致するメッセージにもフィルタを適用する
ここをチェックすると、過去に受信したメールにも自動でラベルの振り分けがされます。

一定期間が過ぎたら、メールの自動断捨離。

ちょっと、上級者編です(コピペで済むので、ご安心を)。
Google Apps Scriptで、プログラムを書いて、自動で処理するように設定します。

Google Apps ScriptはGoogleが提供するプログラミングアプリで、JavaScriptプログラムを記述し実行してGoogleアプリ内や連携アプリの複雑な処理の自動化が行えます。

Google Apps Scriptをはじめよう。

Google Apps Scriptを使うにはGoogleのアカウントが必要です。

〔 1 〕Google driveを開きます

〔 2 〕左上の「+新規」から「その他」→「+アプリを追加」

〔 3 〕Google Apps Scriptを検索して追加します。

〔 4 〕Google Apps Scriptを立ち上げます。

①指定ラベルのメールを3ヶ月分、自動で削除するプログラム

//がついている行は自分だけのメモ書きです。プログラムとは認識されない文字列です。

余談ですが、私は何の処理をしているのか覚書をプログラムに一緒に書いておく派です。
処理内容の理解や、忘れてしまった時の覚書のために書いています。

//指定ラベルの90日前のメールを自動で削除

function deleteOldGmails() {
//処理ルールの名前です。「deleteOldGmails」の部分は英数字で別の名前に変更しても大丈夫です。

  var queries = [
    'label:削除対象ラベル1',
    'label:削除対象ラベル2',
    'label:削除対象ラベル3',
  ];
//「削除したいラベル1」の部分を書き換えて使います。
// ラベルを追加する時は「'label:削除対象ラベル1',」までをコピーして行を追加してください。  

// 削除対象ラベル1〜3に対して繰り返しの処理を行います。
  for(var i=0; i < queries.length; i++){
    var query = queries[i];
    Logger.log('削除開始:' + query);
    var criteria = '' + query + ' older_than:90d -is:starred'
// 「older_than:90d」の90の部分を変更すると削除する期間を変更できます。
    var deleteThreads = GmailApp.search(criteria);
    Logger.log('該当スレッド: ' + deleteThreads.length + '件');
    for (var j = 0; j < deleteThreads.length; j++) {
     deleteThreads[j].moveToTrash();
    }
    Logger.log('' + query + 'の処理を終了')
  }
}

プログラムを書いたら、「削除対象ラベル1」の部分をご自身のラベルに書き換えてください。
「▷実行」を押すと、プログラムが実行されます。

…が「このアプリはGoogleで確認されていません」とポップアップの警告が出てきました。
びっくりしますよね。怯まないでください。

「このアプリはGoogleで確認されていません」の警告画面



①の詳細を押して、下に出てくる②「無題のプロジェクト(安全ではないページ)に移動」をクリックしてください。

無事にプログラムが実行され、ログが画面下に表示されます。
エラーが出てしまった時は、書き間違えがないかチェックしてみてくださいね。

②定期的に自動でプログラムが作動するようにする

でも、このままだと、プログラムを実行するのに、毎回Google Apps Scriptで「▷実行」を押さないと、削除処理をしてもらえません。

「▷実行」を押さなくても、3ヶ月ごとにトリガー(引き金)が発火して自動で削除してくれるように設定します。

3ヶ月ごとに発火するトリガー

「deleteOldGmails()」の下に新しくプログラムを書いていきます。
ここでは、現在の日時を取得して、3ヶ月後の特定の日を指定して’deleteOldGmails’を実行させます。

function setTrigger() {
//ーーー3ヶ月毎に発動するトリガーの新規設定ーーー
  let now = new Date();
//「now」という変数に、現在の日時を取得して定義します。
  let y = now.getFullYear();
//「y」という変数に、上記の日時から年を取得して定義します。
  let m = now.getMonth();
//「m」という変数に、上記の日時から月を取得して定義します。
  let date = new Date(y, m+4, 0, 12, 0);
//「date」という変数に、トリガーを発動させたい特定の日時を指定します。
//new Date()の括弧の中に(年,月,日, 時間, 分)を指定することで、現在の日時から特定の日時を指定することが可能です。
  ScriptApp.newTrigger('deleteOldGmails').timeBased().at(date).create();
//'deleteOldGmails'処理のトリガーを「date」で指定した特定の日時で設定するプログラムです。
}

9行目の「new Date(y, m+4, 0, 12, 0)」が、
月の指定が『m+4』日の指定が『0』であることによって、「4ヶ月後の0日」つまり、「3ヶ月後の月末」をの12時を指定しています。

自動削除処理プログラムにトリガープログラムを組み込む

最初に作成したプログラム「deleteOldGmails()」の最後から2行目に、setTrigger();を設置します。
こうすることで、「deleteOldGmails()」のプログラムの最後の処理で、2つめに作った「setTrigger()」のプログラムで3ヶ月後のトリガーが自動で設定される仕組みです。

//指定ラベルの90日前のメールを自動で削除

function deleteOldGmails() {
//処理ルールの名前です。「deleteOldGmails」の部分は英数字で別の名前に変更しても大丈夫です。

  var queries = [
    'label:削除対象ラベル1',
    'label:削除対象ラベル2',
    'label:削除対象ラベル3',
  ];
//「削除したいラベル1」の部分を書き換えて使います。
// ラベルを追加する時は「'label:削除対象ラベル1',」までをコピーして行を追加してください。  

// 削除対象ラベル1〜3に対して繰り返しの処理を行います。
  for(var i=0; i < queries.length; i++){
    var query = queries[i];
    Logger.log('削除開始:' + query);
    var criteria = '' + query + ' older_than:90d -is:starred'
// 「older_than:90d」の90の部分を変更すると削除する期間を変更できます。
    var deleteThreads = GmailApp.search(criteria);
    Logger.log('該当スレッド: ' + deleteThreads.length + '件');
    for (var j = 0; j < deleteThreads.length; j++) {
     deleteThreads[j].moveToTrash();
    }
    Logger.log('' + query + 'の処理を終了')
  }
setTrigger(); // メール削除後にトリガーを設定
}

しかし、このままだと、自動で新しく何個もトリガーを作り続けることになります。
『トリガー』としてGoogle Apps Scriptの中に溜まっていってしまいます。
それを毎回自動で設定と削除を繰り返すようにします。

トリガーが溜まっていく様子

過去に設定されたトリガーを削除

2行目〜9行目のコードを追加することで’deleteOldGmails’を実行した後に、過去のトリガーを削除するプログラムを最初に実行します。

function setTrigger() {
//ーーー過去に設定されたトリガーを削除ーーー
  let triggers = ScriptApp.getProjectTriggers();
  for(let trigger of triggers){
    let funcName = trigger.getHandlerFunction();
    if(funcName == 'deleteOldGmails'){
//このトリガーの対象となる処理ルール名'deleteOldGmails'を入れます。
      ScriptApp.deleteTrigger(trigger);
    }
  }
//ーーー3ヶ月毎に発動するトリガーの新規設定ーーー
  let now = new Date();
//「now」という変数に、現在の日時を取得して定義します。
  let y = now.getFullYear();
//「y」という変数に、上記の日時から年を取得して定義します。
  let m = now.getMonth();
//「m」という変数に、上記の日時から月を取得して定義します。
  let date = new Date(y, m+5, 0, 12, 0);
//「date」という変数に、トリガーを発動させたい特定の日時を指定します。
//new Date()の括弧の中に(年,月,日, 時間, 分)を指定することで、現在の日時から特定の日時を指定することが可能です。
  ScriptApp.newTrigger('deleteOldGmails').timeBased().at(date).create();
//'deleteOldGmails'処理のトリガーを「date」で指定した特定の日時で設定するプログラムです。
}

まとめ:プログラムの全貌

細かい説明行を削除した、プログラムの全文です。
これをまるっとコピーして’label:削除対象ラベル1’だけご自身のラベル名に変更すれば、すぐ使えます。
快適なGmailライフを過ごしてください!

//ーーー指定ラベルの90日前のメールを自動で削除ーーー
function deleteOldGmails() {
  var queries = [
    'label:削除対象ラベル1',
    'label:削除対象ラベル2',
    'label:削除対象ラベル3',
  ];

  for(var i=0; i < queries.length; i++){
    var query = queries[i];
    Logger.log('削除開始:' + query);
    var criteria = '' + query + ' older_than:90d -is:starred'
    var deleteThreads = GmailApp.search(criteria);
    Logger.log('該当スレッド: ' + deleteThreads.length + '件');
    for (var j = 0; j < deleteThreads.length; j++) {
     deleteThreads[j].moveToTrash();
    }
    Logger.log('' + query + 'の処理を終了')
  }
setTrigger();
}

//ーーー3ヶ月毎に発動するトリガーの設定ーーー
function setTrigger() {
  let triggers = ScriptApp.getProjectTriggers();
  for(let trigger of triggers){
    let funcName = trigger.getHandlerFunction();
    if(funcName == 'deleteOldGmails'){
      ScriptApp.deleteTrigger(trigger);
    }
  }
  let now = new Date();
  let y = now.getFullYear();
  let m = now.getMonth();
  let date = new Date(y, m+5, 0, 12, 0);
  ScriptApp.newTrigger('deleteOldGmails').timeBased().at(date).create();
}