前提
- Googleアカウントを持っている
- JavaScriptの基礎知識
- APIの基礎知識
作ったもの
毎朝4~5時に自分で設定した削除メアドリストにあるメールアドレスからのメールをGmail
の受信トレイ
からゴミ箱
に移すシステム。(完全に削除する関数が用意されていないため、完全に削除したい場合はゴミ箱
から手動で行う。)
技術選定(この記事で学べること)
- 削除メアドリストの設定 → Googleの「バックアップと同期」
- ↑のリストの取得 → DriveApp
- 条件にあったメールオブジェクトの取得 → GmailApp
- ↑を毎朝4~5時に削除する → Google Apps Script
いざ、実装
DriveApp、GmailAppはGoogle Apps Scriptの中の話なのでまとめちゃって
- Googleの「バックアップと同期」による削除メアドリストの設定
- システムのメインの部分(Google Apps Script)
- 毎朝4~5時のトリガー(Google Apps Script)
の順に説明しちゃいます。
削除メアドリストの設定
ローカルで削除メアドリストをjson形式で作成し、Google Drive
と同期しておく。この設定をしておくと、新たに削除したいメールアドレスが出てきたときや、やっぱりこのメールアドレスは削除したくない!となった時に、ローカルで変更するだけでOKとなり、便利です。
{
"送信元の名前1": "メールアドレス1",
"送信元の名前2": "メールアドレス2",
"送信元の名前3": "メールアドレス3"
}
今回は設定したメールアドレスからのメールの中で、直近7日に受信
した既読
でスターがついていない
メールを削除するようにシステムを構成します。(つまり、削除したくない!となったらスターをつけておけばOK。)
詳しくは次章。
参考:Googleの「バックアップと同期」で大事なデータを自動保存!
システムのメインの部分
https://script.google.com にアクセスし+ 新しいプロジェクト
をクリックするとエディタが起動!簡単!
以下のようなソースコードを書いていきます。(拡張子.gsだけど、JavaScriptと同じだよ!)
最新のソースコードはGitHub上で公開しています。→ここ
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 Drive
、Gmail
にアクセスするため、承認
が必要となります。
▶︎
ボタンで関数を実行*すると承認を求めるモーダルが出現するので、承認しましょう。(初回のみ)
*そのままの実行が怖ければ上記ソースコードのdeleteThreads[i].moveToTrash();
をLogger.log('test')
に置換してから実行しましょう。(このログは「表示
タブのログ
」に記録される。)
参考:【GoogleAppsScript】ログ出力(デバッグ目的)
いざ、トリガー設定
とても簡単に設定できます。
▶︎
ボタンの左にあるタイマー(?)を模したアイコン
をクリックして、あとはお好みの設定を行い保存
すればOKです。(私はなんとなく毎朝4~5時に設定しました。)
完成!
これにて実装完了となります、お疲れ様でした!
ボリュームを抑えるために、ところどころ説明を端折っており、少々分かりづらいかも知れません。
ご感想、ご質問等があればぜひコメントをお寄せください😊
感想
AWS等を使うよりも簡単にできたと思います。しかも無料。
Lambda + S3でも良かったのですが、
- 前回がLambdaを使った記事だった
- Google Apps Scriptを使ってみたかった
- システムの対象がGoogleのサービスである
Gmail
だった
というのもあり、Google Apps Script + Google Driveでの実装に挑戦することにしました。確かにDriveApp、GmailApp等がもともと用意されているので、Googleのサービスを触るシステムの場合はGoogle Apps Scriptが有用だなと感じました。