Gmail に届くメールを Google App Script で一定期間後に削除する
概要
- ずいぶん昔にGmailの整理をしたときに設定したGASを、友人に共有するために記事化
- フィルタリング→ラベル付けしたもののうち、特定のラベルが付いたものは一定期間が経過したら自動で削除されるようにする
- フィルタ設定についての詳細は割愛する
参考エントリー
手順
GASの新規プロジェクトを追加
- Google App Script のページを開く
- 左上の [新しいプロジェクト] ボタンを押下
- 適当に名前をつける
- 自分は
auto delete email
とした
- 自分は
スクリプトを作成
デフォルトで作成される コード.gs
に以下をコピペし、内容を適宜書き換える。
delayDays
:削除するタイミングdeleteLabel
:対象のラベル
スター付きにしたものも削除する場合は -is:starred
の記述を削除すればOK。
function autoDeleteEmail_magazine() {
var delayDays = 8; //1週間経ったら消す
var deleteLabel = "*メルマガ・クーポン";
var deleteThreads = GmailApp.search('older_than:'+delayDays+'d -is:starred label:'+ deleteLabel);
for (var i = 0; i < deleteThreads.length; i++) {
deleteThreads[i].moveToTrash();
}
}
複数設定する場合は、関数をコピペで複製して別の名前に変更する。
トリガーを設定
追加方法
- サイドメニュー > トリガー に遷移
- 右下の [トリガーを追加] ボタンを押下
- 後述の設定項目を参考に、定義した関数ごとに設定
- まとめたい場合は全部実行する関数を追加で作ってそれを呼び出せばいいと思う
- ラベルごとに処理を切り分けたいのでやってない
トリガーの設定項目
- 実行する関数
- スクリプト側で定義した関数名を選択
- デプロイ時に実行
- プルダウン動かないのでそのままでOK
- スクリプトをデプロイしていないので関係ない
- プルダウン動かないのでそのままでOK
- イベントのソース
- 時間主導型
- 時間ベースのトリガーのタイプ
- 以下から好きなものを選択
- 特定の日時
- 動作確認にはよいが、定期的に回すならNG
- 分ベースのタイマー
- 「実行間隔」を1分単位で設定できる
- 時間ベースのタイマー
- 「実行間隔」を1時間単位で設定できる
- 日付ベースのタイマー
- 「実行する時刻」を1時間単位で設定できる
- 週ベースのタイマー
- 「実行する曜日と時刻」を設定できる
- 月ベースのタイマー
- 「実行する日付と時刻」を設定できる
- 特定の日時
- 以下から好きなものを選択
- エラー通知設定
- 以下から好きなものを選択
- 今すぐ通知を受け取る
- 1時間おきに通知を受け取る
- 毎日通知を受け取る
- 1週間おきに通知を受け取る
- 以下から好きなものを選択
参考:自分の設定内容
Gmail 側の対象フィルタ
*メルマガ・クーポン
ラベル*通知
ラベルのうち、以下のサブラベル*入荷・新刊
:e-honの新刊パトロール通知を振り分けてる(が、メール配信サービスが終わってしまった…)*配送
:ネットショップの出荷通知が入るようにsubject:(*発送*|*出荷*|*配達*)
で振り分けてるクレジット
:利用通知や請求予告などを振り分けてる
スクリプト
function autoDeleteEmail_magazine() {
var delayDays = 8; //1週間経ったら消す
var deleteLabel = "*メルマガ・クーポン";
var deleteThreads = GmailApp.search('older_than:'+delayDays+'d -is:starred label:'+ deleteLabel);
for (var i = 0; i < deleteThreads.length; i++) {
deleteThreads[i].moveToTrash();
}
}
function autoDeleteEmail_arrival() {
var delayDays = 8; //1週間経ったら消す
var deleteLabel = "*通知-*入荷・新刊";
var deleteThreads = GmailApp.search('older_than:'+delayDays+'d -is:starred label:'+ deleteLabel);
for (var i = 0; i < deleteThreads.length; i++) {
deleteThreads[i].moveToTrash();
}
}
function autoDeleteEmail_delivery() {
var delayDays = 15; //2週間経ったら消す
var deleteLabel = "*通知-*配送";
var deleteThreads = GmailApp.search('older_than:'+delayDays+'d -is:starred label:'+ deleteLabel);
for (var i = 0; i < deleteThreads.length; i++) {
deleteThreads[i].moveToTrash();
}
}
function autoDeleteEmail_credit() {
var delayDays = 31; //1ヶ月経ったら消す
var deleteLabel = "*通知-クレジット";
var deleteThreads = GmailApp.search('older_than:'+delayDays+'d -is:starred label:'+ deleteLabel);
for (var i = 0; i < deleteThreads.length; i++) {
deleteThreads[i].moveToTrash();
}
}
トリガー
項目 | 内容 |
---|---|
実行する関数 | スクリプト側で定義した関数名 |
デプロイ時に実行 | Head |
イベントのソース | 時間主導型 |
時間ベースのトリガーのタイプ | 日付ベースのタイマー |
時刻を選択 | 午後12時~1時 |
エラー通知設定 | 毎日通知を受け取る |