「Gmailに重要なメールが届いたら通知するように設定していても、ときどき気付けないことがある。1通のメールでも繰り返し通知できたらいいのに」……。そのような場合のために、対象のメールを「Google Apps Script(GAS)」で繰り返し転送する方法を紹介する。
対象:Gmail、Google Apps Script(GAS)
「Gmailのメールボックスに届いた重要なメールを見逃したせいで対応が遅れてしまった」「届いたらすぐスマートフォン(スマホ)やスマートウォッチに通知されるように設定したのに、睡眠中で気付けなかった」……。このような経験をしたことはないだろうか?
筆者の場合、睡眠中も装着しているスマートウォッチの音と振動で目覚めるように仕掛けておいたのに、全く通知に気付かずに熟睡し、朝になってシステムトラブルに気付いてあわてたことが何回もある。
その原因の一つは、メール1通につき通知が1回しか届かないことだ。仮に、メールを確認するまで繰り返し通知されれば、睡眠中でも気付く可能性は高くなるだろう(隣で眠っているパートナーまで起こしてしまう危険性もあるが)。
しかし、Gmailの標準機能では1通のメールで繰り返し通知させることは困難なようだ。
そこで本Tech TIPSでは、Googleのサービスを自動処理するのに役立つサービス「Google Apps Script(GAS)」を活用して、上記のような機能を実現する手順を紹介したい。GASはスクリプト言語の一種で、手軽にGmailの処理を自動実行できる。定期的な実行もお手のものだ。しかも無料で利用できる。
通知には別のメールアドレスへの転送を利用する。例えば携帯回線用のメールアドレスに転送すれば、比較的容易にスマホへの通知と連動できる。後は、Gmailに重要なメールが1通届いたら、それを既読にするまで、指定のメールアドレスに一定間隔で転送され続けるようにすればよい。
以下ではGASをよく知らない人でもなるべく実践できるように、作業内容を1ステップずつ説明している。
まず、Gmailで繰り返し通知する対象のメールに付ける「ラベル」を新たに作成する。それには、以下のようにPCのWeb版Gmailを用いる。
上記のラベルは、他のラベルの階層下に入れないで最上位とし、かつ半角英数字とアンダーバーぐらいでシンプルに通知用と分かるように記述した方がよいだろう(GASのスクリプトでラベルの取得に失敗する、といったエラーを減らせる)。
次に、Gmailの「フィルタルール」を追加して、対象のメールが着信した時に自動で前述のラベルが割り当てられるようにする。
対象のメールには、既に別のラベルを割り当てるフィルタルールが存在するかもしれない。しかし、そちらには手を付けず、新たに今回の通知専用のラベルを割り当てた方がよい。整理用と通知用という目的別にフィルタルールを分離した方が混乱を引き起こしにくく、また通知したいメールの種類が増えても通知用フィルタだけを改修すれば済むからだ。
ただし既存のフィルタールールの方で[既読にする]が「オン」になっている場合は、編集してこれを「オフ」に変えること。「オン」のままでは未読メールを見つけられず、通知もできないからだ。
次に、通知のためにメールを転送するプログラムをGASで記述する。以下はそのリストだ。
function forwardLabeledUnreadGmails() {
// 【要書換】通知対象のラベル名
const LABEL_NAME = "_notifications";
// 【要書換】転送先メールアドレス
const FORWARD_EMAIL_ADDR = "[email protected]";
// 転送時のメール本文
const forwardMailBody = "早急にGmailで当該メールを読んでください。それまで、このメールは繰り返し送信されます。";
// 指定のラベルをGmailから取得
const label = GmailApp.getUserLabelByName(LABEL_NAME);
// ↑のラベルが付いていて未読メッセージを含むスレッドを抽出
const threads = label.getThreads().filter(thread => thread.isUnread());
threads.forEach(thread => {
// スレッド内のメールを取得
const messages = thread.getMessages();
messages.forEach(message => {
// 未読メールのみ処理
if (message.isUnread()) {
// メールの件名を取得
const originalSubject = message.getSubject();
// メールを転送
message.forward(FORWARD_EMAIL_ADDR, {
subject: "転送: " + originalSubject, // 件名を加工
htmlBody: forwardMailBody // 本文
});
}
});
});
}
上記リストをスクリプトとして使えるようにするには、GASのサイトに登録する必要がある。
それには、以下の手順でGASのプロジェクトを作成してから、上記リスト(関数)をコピー&ペーストしてスクリプトにする。
リストを編集した後、[Ctrl]+[S]キーを押すと、即座にリストを保存できる。
スクリプトを作成したら、実行してみて、正しく動くかどうかテストしてみよう。
初回実行時のみ、元のメールが届くGmailのメールボックスを参照するための権限を許可するように求められる。以下のように、必ず記載のGoogleアカウントのメールアドレスが自身で所有するものと一致することを確認すること。
権限の許可が完了すると、スクリプトが実行され、その結果が実行ログとして記録される。
実行に失敗すると、以下のようなログが記録されるので、リストを修正しよう。
スクリプトを正しく実行できるようになったら、5分おきに実行して、未読メールをチェックして転送するようにスケジュールを組む(5分だと短すぎると感じるなら、10分おきでもよいだろう)。それには以下のようにGASの「トリガー」を新たに作成する。
トリガーの設定が完了したら、その動作を確認してみよう。それには、通知の対象となり得る既存メールを1つ選んで、手動で通知用のラベルを付けつつ、既読から未読に変更する。
その後、「時間の間隔を選択」プルダウンリストで選択した5分または10分が経過するたびに、メールが繰り返し転送されるはずだ。
想定通りに通知がスマホなどに届いたら、Gmailで対象メールを開いて既読にし、通知が止まることも確認しよう。
スマホやスマートウォッチの通知設定は複雑なため、ちょっとした設定変更によって、通知が画面に表示されない、音や振動が生じない、といったトラブルが生じることがよくある。これは機種やOSの種類、バージョンなどによって対処方法も異なるため、試行錯誤せざるを得ないこともよくある。
メール転送や通知を繰り返していると、サーバあるいはクラウドサービス側で止められてしまうこともあるようだ。例えば、1日あるいは1時間当たりの最大回数があらかじめ定められている場合、それを超えた分は強制的に止められる。前述のトリガーの設定にある「時間の間隔を選択」プルダウンリストで間隔を延ばすなどの対策が必要になるだろう。
■関連リンク
Copyright© Digital Advantage Corp. All Rights Reserved.