Googleスプレッドシートに記述したメールアドレスの一覧を使ってGmailからメールを削除するスクリプト

この記事を書いた背景

テストやログとして取ったりするメールなど、一定期間だけ必要なものをまとめて削除したくなったのがきっかけです。

自動化する方法について

最初はSeleniumなどに代表されるブラウザー本体の自動化ツールで試みたのですが、そもそもSelenium動かなくなっているし、GmailのID割り当ては複雑だし、すぐに面倒になって止めました。

今回はGmailに対して自動化を行いたいので、親和性が高いであろう(実際高かった)Google Apps Scriptを利用しました。

また、スクリプト内にメールアドレスの一覧を記述するのは仕組み的にも微妙なので、Googleスプレッドシートに記述したメールアドレスの一覧を使うように作りました。

作ったもの

次の画像は、Googleドライブの中に作ったメールアドレスの一覧を保存したスプレッドシートです。

A列に、1セルに1メールアドレスで記述してありますが、とくに体裁などは気にしていません。

スクリプトで削除するメールアドレスの一覧

ここで、「ツール|スクリプトエディタ」メニューを選択し、スクリプトエディタを起動します。

作ったコードは次の通りです。
ご自身のやりたい内容に合わせて適宜変更してください。

「実行|関数を実行|doCleanup」メニューを選択することで、スクリプトが実行され、スプレッドシートに記述したメールアドレスのうち条件に一致するものがGmailから削除されます。

function doCleanup() {
  Logger.clear();
//  IDでスプレッドシートを開く場合
//  var ss = SpreadsheetApp.openById("xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx");
  var ss = SpreadsheetApp.getActive();
  var sheet = ss.getSheets()[0];
  var searchQuery = '';
  var trashedCount = 0;

//  無限ループさせて->(1)
  for( var i = 1; true ; i++ ) {
    var range = sheet.getRange("A" + i);
    var targetAddr = range.getValue();
//    (1)空白セルだったら抜ける
    if  ( targetAddr == '' ) {
      break;
    }

//    検索クエリはGmailの検索ボックスと同じものが使えます
//    検索クエリの例) メールアドレス+重要フラグ無し+ユーザーラベル無し+スター無し
    searchQuery = 'from:' + targetAddr + ' OR to:' + targetAddr + ' -is:important has:nouserlabels -is:starred';
    Logger.log( 'target address:' + targetAddr );

//    検索の実行
    var threads = GmailApp.search( searchQuery );
    Logger.log( threads.length );
//    ゴミ箱に移動した数のカウント
    trashedCount += threads.length;
//    取得したスラッグ
    for (var j = 0; j < threads.length; j++) {
      threads[j].moveToTrash();
    }
  }
  Logger.log( 'moved:' + trashedCount );
  Logger.log( 'end' );
}

5分以上かかるような処理の場合はスクリプトが止まってしまいますので、適宜再実行してください。

まとめ

普段Google Apps Scriptは書かないのですが、JavaScriptなのでオブジェクトのリファレンスがあれば意外と簡単に記述できて良いですね。

Google Appsに関連するちょっとした自動化プログラムは、今後もこのように書いていこうかと思いました。

え?Webサイトのバックアップ、してないの!?

いざという時には復旧までしてくれる
『ワードプレス外部バックアップサービス』

■3つの特長
・自分でやらなくて良い
・いざという時の復旧付き
・外部サーバーにバックアップ

コメントを残す