はじめに
新聞や雑誌と同じく、定期的に届くメルマガは、最新であることにアイデンティティを持っていますよね。
つまり、最新号以外のメルマガのメッセージなど不要ということになります。
しかし、プライベートのメールをすべてGmailにまとめている私の場合、「1つ前のメルマガ」は既に受信トレイの遥か彼方。ムダにGoogleアカウントの容量を食われてしまいますし、何よりも受信トレイがゴチャゴチャです。
というわけで、寝ている間に勝手に削除してくれるスクリプトを書いてみました。
参考にした記事
-
Gmailの受信トレイ内のメールを自動削除するやり方 - Qiita
やろうとしている方向はこちらと同じ。
ワンポイント
- 定期的に削除したいメルマガは増減がありそうなので、Googleスプレッドシートに対象のアドレスなどを入力、参照するようにした。
- 重要なアドレスは対象にしないが、たまに「こんなにも自動削除しているのかー」と眺めたいので処理結果をログとして残す。
実装
script.js
function mailMagazineDeleteBatch() {
// アドレスなどを入力してあるスプレッドシートファイルを参照
var spreadSheet = SpreadsheetApp.openById(/*ファイルID*/);
var sourceSheet = spreadSheet.getSheets()[0];
// 送信元アドレスと削除しない期間を配列として取得
var fromList = sourceSheet.getRange(2, 1,sourceSheet.getLastRow(), 2).getValues();
var deleteCount = 0; //ログ用削除件数カウンタ
for (var i=0; i<fromList.length; i++){//アドレスの数だけ繰り返し
//アドレス毎に指定日前かつスターが付いていない受信トレイ内のスレッドを検索
var deleteThreads = GmailApp.search('from:'+fromList[i][0]+' older_than:'+fromList[i][1]+'d -is:starred in:inbox');
for (var j=0; j<deleteThreads.length; j++) {//スレッドの数だけ繰り返し
deleteThreads[j].moveToTrash(); //1件ずつ削除
deleteCount++; //削除カウンタ加算
}
}
// 2つめのシートにログ出力
var logSheet = spreadSheet.getSheets()[1];
var insertRow = logSheet.getLastRow()+1;
logSheet.getRange(insertRow, 1).setValue(new Date()); //処理完了日時
logSheet.getRange(insertRow, 2).setValue(deleteCount); //削除件数
}
- 基本的な文法はJavaScriptに従う1
- ロジックはコメントの通りですね。
用意したスプレッドシード
ログ出力結果
おわりに
初めてQiitaに投稿してみました。
記事の編集画面がサクサクと書けて幸せだったのでたまに投稿できたらなと思います。
-
シンタックスハイライト用に.jsとしたが実際には.gsである ↩