毎日、多くのメールが届いていますが、以下のような2種類があることに気づきました。
- 友人とのやりとりなど、そのメールの内容に意味があるもの
- 楽天などへのWebサイトのログイン通知やネットショッピングの発送通知・株式取引の約定通知など、メール自体に意味があるもの
前者についてはそれほど急いで確認する必要がないことがほとんどですが、後者はできる限り早く知りたい反面、メールそのものは通知自体が把握できれば不要とも言えます。
現在、Slackを何か活用できないかと、いわゆる「一人Slack」をやっているのですが、上記のメールのうち後者の分類のものをSlackに飛ばし、前者の分類のメールは通知しなくても良いのではないかと思いました。
(逆に、前者の分類のメールは、中身を見なくてすむようになる。)
特に、私はMi band 3を使っているので、移動中に知る必要がある内容のみをMi bandに通知できると便利なのです。
メールはGmailを使っていますので、GmailからSlackに転送する類の情報は簡単に見つかります。例えば、Slackの「Email」のアプリを使い、Gmailのフィルタと転送機能で条件に合致するメールを転送することができます。
しかし、この方法の場合、下の画像の上段のように、そのメール自体の内容がすぐに確認できません。一方で、メール全体を転送するので、内容を表示した場合には不要な部分まで含まれています。これを、下の画像の下段のように、必要な部分のみが直接見えるようにしたいと思いました。
メールの転送についていろいろ調べたところ次の2つが見つかるのですが、以下のいずれの方法も自分の希望を満たしていませんでした。
- Slackの「Email」のアプリで転送先となるメールアドレスを作成し、Gmailのフィルタで転送する
- Slackの「incoming-webhook」のアプリとIFTTTで、Gmailの内容の一部を転送する
→これも、メールの必要な部分だけを切り取ることができない
なお、私の希望は次の通りです。
- 受信するメールの一部を転送対象とする
- 本文の、必要な部分だけを切り取る
(ただし、「必要な部分」はメールごとに異なる) - メールごとに異なるチャンネルに流し込む
- メール自体は既読にし、アーカイブする
(消しても良いかもしれませんが、当面は後で確認できるようにアーカイブします) - 転送対象ではないメールはそのまま残す
いろいろ試した結果、結局、以下の方法で実現することができました。
- 対象のメールに関するさまざまな「定義」をJSON形式で定義し、Google Drive内に配置する
(最初はスクリプト内に定義していましたが、数が多いので別ファイルにしました) - Google Apps Scriptで以下の処理を行う
1 メールボックスのメールを取る
2 条件に合致する場合、「定義」に従って本文の一部を切り取る
3 その内容を、「定義」で指定されたチャンネルに流し込む
4 処理したメールを既読にし、アーカイブする - G Suite Developer Hubでトリガーを作り、一定間隔(例えば1分)ごとにスクリプトを実行する
必要なものはGoogleのアカウントとSlackのアカウントのみです。無料で実現できます。
詳細は明日書きます。