メール数を少なくすると、imapによるメール同期が軽くなったり検索が高速になったりするのでオススメです〜
新年あけましておめでとうございます。今年も文系プログラマによるTIPSブログとtreeをよろしくお願いします。
さて、新年1発目のお題は「メールの世代管理」です。
プログラマな皆さんなら各種ログはcron等で世代管理していたりしますよね。では、gmailのメールはちゃんと世代管理していますか?会社のメールならともかく、個人メールだと乱雑に不要なメールが溜まりがちです。これを機にメールの世代管理もしましょう!
世代管理は以下のようなメールに有効に機能します。
- セール情報のメール
- 電気代やクレジットカード等の請求メール
- 佐川やヤマトの配達通知メール
- twitterやfacebookの通知メール
一定期間過ぎてしまうと無意味になってしまうメール、セキュリティ的に長期間保存しておきたくないもの、各種通知系等が主な世代管理対象になります。
では早速やってみましょう。
- gmailを開く
- 世代管理用のラベルを作成する
- 世代管理したいメールをフィルタで「30日で削除」ラベルに振り分ける
- Googleドライブを開く
- Googleスプレッドシートを新規作成する
- スプレッドシートのファイル名を付ける
- スクリプトエディタを開く
- スクリプトエディタが開く
- スクリプトを編集して保存する
- プロジェクト名を設定して保存
- スクリプトを実行してみる
- 実行権限を付与する
- 実行を許可する
- スクリプトが実行される
- トリガーを作成する
- トリガーを追加する
- トリガーを作成して完了
- 雑感
gmailを開く
まずは対象のgmailをwebブラウザで開きます。
世代管理用のラベルを作成する
世代管理専用のラベルを作成します。ここでは「30日で削除」という名前でラベルを作ります。
世代管理したいメールをフィルタで「30日で削除」ラベルに振り分ける
世代管理したいメールのフィルタを作成し、前述で作成したラベルに振り分け設定をします。
Googleドライブを開く
先ほど作成したフィルタに対して、Apps Scriptを作成・適用したいので、Googleドライブを開きます。
Googleスプレッドシートを新規作成する
Apps Scriptを作成するのにGoogleスプレッドシートが必要なので、新規作成します。
スプレッドシートのファイル名を付ける
初期状態だと「無題のドキュメント」となっているので、適当にファイル名をつけます。
スクリプトエディタを開く
メニューバー → ツール → スクリプトエディタ と開きます。
スクリプトエディタが開く
スクリプトエディタを開くと、以下のような画面になります。既に雛形のメソッド「MyFunction」がありますが、これは使いません。
スクリプトを編集して保存する
以下のスクリプトをコピペして貼り付けて下さい。
function expire30days() { var day = 30; var label = '30日で削除'; var threads = GmailApp.search('older_than:' + day + 'd -is:starred label:' + label); for (var i = 0; i < threads.length; i++) { threads[i].moveToTrash(); } }
もし「30日で削除」というラベル名にしなかった場合は任意に「var label = 'xxx'」の部分を編集して下さい。
編集できたら「保存」ボタンをクリックします。
プロジェクト名を設定して保存
プロジェクト名の入力を求められるので、適当に「gmail」と入力してOKボタンをクリックします。
スクリプトを実行してみる
作成したスクリプトを早速実行してみましょう。▶ボタンをクリックするとスクリプトを実行できます。
実行権限を付与する
Apps Scriptからgmailを操作するには、gmailに対して「Apps scriptで操作される事を許可する」必要があります。
実行を許可する
「許可」ボタンをクリックして許可します。
スクリプトが実行される
許可ボタン押下後、元のスクリプト画面に戻り、自動的にスクリプトが実行されます。「30日で削除」ラベルに沢山メールがある場合、削除に時間がかかります。
2016/01/02時点ではApps Scriptは6分までしか実行できないようです。スクリプトを実行してから6分経過すると強制的にスクリプトが停止します。
Quotas for Google Services | Apps Script | Google Developers
トリガーを作成する
作成したApps Scriptを定期的に自動実行して欲しいので、トリガー(cronみたいなの)を作成します。
トリガーを追加する
初期状態だとトリガーが空っぽなので、リンク部分をクリックしてトリガーを追加します。
トリガーを作成して完了
どのメソッドを、どんなタイミングで定期実行するかを決める事ができます。日タイマーを選択すると、毎日自動実行してくれます。
これでgmailに作成した「30日で削除」ラベルに振り分けられたメールを、expire30daysメソッドを毎日定時実行して削除する世代管理が設定できました。
雑感
会社の場合は使用するメールアドレスが1個の場合がほとんどだと思いますが、個人で使うメアドは複数の場合が多いですよね。すると必然的にMail.appやThunderbird等のメーラーを使う機会が増えます。
最近だと大抵imapでメールを同期すると思いますが、メール数が多いと同期に時間がかかったりしてPCが重くなったりする事もあります。なので、可能な限り不要なメールは削除していく事をオススメします。
少ないメールアカウントで少ないメール数なのが理想なのですが、私の場合は個人で使うメールアドレスが5アカウントもあるので、大量のメールをimapで同期しています。これが最近メールの掃除をしていなかったせいか、Mail.appが非常に重く困っていました。(メモリは32GByte搭載)そこで今回メールの大掃除をするべく、この記事を書いたわけです。
正直gmailが正式にマルチアカウントの同時表示に対応してくれれば、もうローカルでメーラーを起動する機会もなくなるので、対応して欲しいですね。