メールボックスを重要なメールややり取りの最中のものだけ残してきれいにしておくと、気が散らなくていいということに気づき、実践しています。ところが、パソコン版は一括選択できて簡単にまとめてアーカイブできるものの、スマホ版だといちいち一個ずつ選択しなければアーカイブできず、それが面倒でした。
これを改善するため、「既読かつ☆マークがついていないメールをアーカイブする」スクリプトを組みました。
コピペすれば動くやつ
const main = () => {
const inboxThreads = GmailApp.getInboxThreads()
const shouldArchivedThreads = inboxThreads.filter(thread => !thread.isUnread() & !thread.hasStarredMessages())
archiveThreads(shouldArchivedThreads)
}
const archiveThreads = (threads) => {
threads.forEach(thread => thread.moveToArchive())
}
使い方
- コピペする
- 保存する
- タイマーのマークからトリガーを設定する。僕は一日一回に設定しましたが、毎時または毎分でも問題なく動作します。ただし、スターマークをつける前にアーカイブされるとこまるので、あまり頻度は上げないほうがいいと思います。
ちょっと解説
getInboxThreads()
を使うことで、受信箱の全てのスレッド(メールに対する返信などをまとめたもの)を取得しています。次の行でそれぞれのthreadsの中に未読のものがないか(isUnread()
)と☆がついているものがないか(hasStarred()
)確認します。
ちなみに、jsやgasの初心者の人は下記のコードの方がわかりやすいと思います。
const main = () => {
const inboxThreads = GmailApp.getInboxThreads()
inboxThreads.forEach(threads => {
if (!thread.isUnread() & !thread.hasStarredMessages()) {
thread.moveToArchive()
}
})
}
やっていることは同じです。僕の場合inboxから全て取得ではなくいろいろなボックスやくくりから取得して、それぞれをアーカイブしたり削除したりを分けることも考えていたため、機能を分離するという目的のためにarchiveThread()
関数に書き出していましたが、inboxから取得してアーカイブするだけならこのコードの方がいいと思います(繰り返しますが同じことができます)