1
3

More than 3 years have passed since last update.

【GoogleAppsScript】Gmailの不要メールを定期的に自動削除する!

Last updated at Posted at 2020-06-18

前提

  • Googleアカウントを持っている
  • JavaScriptの基礎知識
  • APIの基礎知識

作ったもの

毎朝4~5時に自分で設定した削除メアドリストにあるメールアドレスからのメールをGmail受信トレイからゴミ箱に移すシステム。(完全に削除する関数が用意されていないため、完全に削除したい場合はゴミ箱から手動で行う。)

技術選定(この記事で学べること)

  • 削除メアドリストの設定 → Googleの「バックアップと同期」
  • ↑のリストの取得 → DriveApp
  • 条件にあったメールオブジェクトの取得 → GmailApp
  • ↑を毎朝4~5時に削除する → Google Apps Script

いざ、実装

DriveApp、GmailAppはGoogle Apps Scriptの中の話なのでまとめちゃって

  1. Googleの「バックアップと同期」による削除メアドリストの設定
  2. システムのメインの部分(Google Apps Script)
  3. 毎朝4~5時のトリガー(Google Apps Script)

の順に説明しちゃいます。

削除メアドリストの設定

ローカルで削除メアドリストをjson形式で作成し、Google Driveと同期しておく。この設定をしておくと、新たに削除したいメールアドレスが出てきたときや、やっぱりこのメールアドレスは削除したくない!となった時に、ローカルで変更するだけでOKとなり、便利です。

DeleteAddressList.json
{
    "送信元の名前1": "メールアドレス1",
    "送信元の名前2": "メールアドレス2",
    "送信元の名前3": "メールアドレス3"
}

今回は設定したメールアドレスからのメールの中で、直近7日に受信した既読スターがついていないメールを削除するようにシステムを構成します。(つまり、削除したくない!となったらスターをつけておけばOK。)

詳しくは次章。

参考:Googleの「バックアップと同期」で大事なデータを自動保存!

システムのメインの部分

https://script.google.com にアクセスし+ 新しいプロジェクトをクリックするとエディタが起動!簡単!

以下のようなソースコードを書いていきます。(拡張子.gsだけど、JavaScriptと同じだよ!)
最新のソースコードはGitHub上で公開しています。→ここ

gmailEliminator.gs
function myFunction() {
  const addressList = DriveApp.getRootFolder()// 「.getFolderById('フォルダID')」でも良い。
    .getFilesByName('DeleteAddressList.json')
    .next().getBlob().getDataAsString('utf-8').replace(/\r?\n/g, '');
  const addressJson = JSON.parse(addressList);
  const addressArray = Object.values(addressJson);
  const deleteAddress = addressArray.join(' from:');
  deleteThreads = GmailApp.search('{ from:' + deleteAddress + ' }' + ' newer_than:7d' + ' is:read' + ' -is:starred');
  for (let i = 0; i < deleteThreads.length; i++) {
    deleteThreads[i].moveToTrash();
    // // デバッグ用
    // deleteThreads[i].markUnread();
    // Logger.log('test')
  }
}

補足:

https://drive.google.com/foo/bar/baz/AB01CD23EF45
                                     |----------|
                                       フォルダID

参考:

毎朝4~5時のトリガー

トリガー設定の前に
上記ソースコードではDriveApp、GmailAppを使用しています。つまり、Google DriveGmailにアクセスするため、承認が必要となります。

▶︎ボタンで関数を実行*すると承認を求めるモーダルが出現するので、承認しましょう。(初回のみ)

*そのままの実行が怖ければ上記ソースコードのdeleteThreads[i].moveToTrash();Logger.log('test')に置換してから実行しましょう。(このログは「表示タブのログ」に記録される。)

参考:【GoogleAppsScript】ログ出力(デバッグ目的)

いざ、トリガー設定
とても簡単に設定できます。
▶︎ボタンの左にあるタイマー(?)を模したアイコンをクリックして、あとはお好みの設定を行い保存すればOKです。(私はなんとなく毎朝4~5時に設定しました。)

参考:Gmailの受信トレイ内のメールを自動削除するやり方

完成!

これにて実装完了となります、お疲れ様でした!
ボリュームを抑えるために、ところどころ説明を端折っており、少々分かりづらいかも知れません。
ご感想、ご質問等があればぜひコメントをお寄せください😊

感想

AWS等を使うよりも簡単にできたと思います。しかも無料。
Lambda + S3でも良かったのですが、

  • 前回がLambdaを使った記事だった
  • Google Apps Scriptを使ってみたかった
  • システムの対象がGoogleのサービスであるGmailだった

というのもあり、Google Apps Script + Google Driveでの実装に挑戦することにしました。確かにDriveApp、GmailApp等がもともと用意されているので、Googleのサービスを触るシステムの場合はGoogle Apps Scriptが有用だなと感じました。

1
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
3