【GAS】重要なGmailの着信を、気付いて既読にするまでスマホに数分おきに通知し続ける方法Tech TIPS

「Gmailに重要なメールが届いたら通知するように設定していても、ときどき気付けないことがある。1通のメールでも繰り返し通知できたらいいのに」……。そのような場合のために、対象のメールを「Google Apps Script(GAS)」で繰り返し転送する方法を紹介する。

» 2025年04月23日 05時00分 公開
[島田広道デジタルアドバンテージ]
「Tech TIPS」のインデックス

連載目次

Gmailの着信に気付くまで通知を繰り返す

対象:Gmail、Google Apps Script(GAS)


 「Gmailのメールボックスに届いた重要なメールを見逃したせいで対応が遅れてしまった」「届いたらすぐスマートフォン(スマホ)やスマートウォッチに通知されるように設定したのに、睡眠中で気付けなかった」……。このような経験をしたことはないだろうか?

 筆者の場合、睡眠中も装着しているスマートウォッチの音と振動で目覚めるように仕掛けておいたのに、全く通知に気付かずに熟睡し、朝になってシステムトラブルに気付いてあわてたことが何回もある。

 その原因の一つは、メール1通につき通知が1回しか届かないことだ。仮に、メールを確認するまで繰り返し通知されれば、睡眠中でも気付く可能性は高くなるだろう(隣で眠っているパートナーまで起こしてしまう危険性もあるが)。

 しかし、Gmailの標準機能では1通のメールで繰り返し通知させることは困難なようだ。

 そこで本Tech TIPSでは、Googleのサービスを自動処理するのに役立つサービス「Google Apps Script(GAS)」を活用して、上記のような機能を実現する手順を紹介したい。GASはスクリプト言語の一種で、手軽にGmailの処理を自動実行できる。定期的な実行もお手のものだ。しかも無料で利用できる。

 通知には別のメールアドレスへの転送を利用する。例えば携帯回線用のメールアドレスに転送すれば、比較的容易にスマホへの通知と連動できる。後は、Gmailに重要なメールが1通届いたら、それを既読にするまで、指定のメールアドレスに一定間隔で転送され続けるようにすればよい。

 以下ではGASをよく知らない人でもなるべく実践できるように、作業内容を1ステップずつ説明している。

手順1――Gmailで対象のメールにラベルを自動で割り当てる設定をする

 まず、Gmailで繰り返し通知する対象のメールに付ける「ラベル」を新たに作成する。それには、以下のようにPCのWeb版Gmailを用いる。

繰り返し通知するメールに付けるラベルを新規作成する(1/2) 繰り返し通知するメールに付けるラベルを新規作成する(1/2)
繰り返し通知するメールに付けるラベルを新規作成する(2/2) 繰り返し通知するメールに付けるラベルを新規作成する(2/2)

 上記のラベルは、他のラベルの階層下に入れないで最上位とし、かつ半角英数字とアンダーバーぐらいでシンプルに通知用と分かるように記述した方がよいだろう(GASのスクリプトでラベルの取得に失敗する、といったエラーを減らせる)。

 次に、Gmailの「フィルタルール」を追加して、対象のメールが着信した時に自動で前述のラベルが割り当てられるようにする。

繰り返し通知するメールに自動でラベルを付けるフィルタルールを追加する(1/2) 繰り返し通知するメールに自動でラベルを付けるフィルタルールを追加する(1/2)
繰り返し通知するメールに自動でラベルを付けるフィルタルールを追加する(2/2) 繰り返し通知するメールに自動でラベルを付けるフィルタルールを追加する(2/2)

 対象のメールには、既に別のラベルを割り当てるフィルタルールが存在するかもしれない。しかし、そちらには手を付けず、新たに今回の通知専用のラベルを割り当てた方がよい。整理用と通知用という目的別にフィルタルールを分離した方が混乱を引き起こしにくく、また通知したいメールの種類が増えても通知用フィルタだけを改修すれば済むからだ。

 ただし既存のフィルタールールの方で[既読にする]が「オン」になっている場合は、編集してこれを「オフ」に変えること。「オン」のままでは未読メールを見つけられず、通知もできないからだ。

手順2――Google Apps Scriptで未読メールを転送する関数を作成する

 次に、通知のためにメールを転送するプログラムを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 // 本文
        });
      }
    });
  });
}

【Google Apps Script】指定のラベルが付いた未読メールを通知用メールアドレスに転送するスクリプト

 上記リストをスクリプトとして使えるようにするには、GASのサイトに登録する必要がある。

 それには、以下の手順でGASのプロジェクトを作成してから、上記リスト(関数)をコピー&ペーストしてスクリプトにする。

Google Apps Scriptで未読メールを転送する関数を新規作成する(1/4) Google Apps Scriptで未読メールを転送する関数を新規作成する(1/4)
Google Apps Scriptで未読メールを転送する関数を新規作成する(2/4) Google Apps Scriptで未読メールを転送する関数を新規作成する(2/4)
Google Apps Scriptで未読メールを転送する関数を新規作成する(3/4) Google Apps Scriptで未読メールを転送する関数を新規作成する(3/4)
Google Apps Scriptで未読メールを転送する関数を新規作成する(4/4) Google Apps Scriptで未読メールを転送する関数を新規作成する(4/4)

 リストを編集した後、[Ctrl]+[S]キーを押すと、即座にリストを保存できる。

手順3――作成したGASのスクリプト(関数)が正しく動くかどうかテストする

 スクリプトを作成したら、実行してみて、正しく動くかどうかテストしてみよう。

作成したスクリプト(関数)を実行してみる 作成したスクリプト(関数)を実行してみる

 初回実行時のみ、元のメールが届くGmailのメールボックスを参照するための権限を許可するように求められる。以下のように、必ず記載のGoogleアカウントのメールアドレスが自身で所有するものと一致することを確認すること。

Gmailのメールボックスを参照するのに必要な権限に許可する(1/4) Gmailのメールボックスを参照するのに必要な権限に許可する(1/4)
Gmailのメールボックスを参照するのに必要な権限に許可する(2/4) Gmailのメールボックスを参照するのに必要な権限に許可する(2/4)
Gmailのメールボックスを参照するのに必要な権限に許可する(3/4) Gmailのメールボックスを参照するのに必要な権限に許可する(3/4)
Gmailのメールボックスを参照するのに必要な権限に許可する(4/4) Gmailのメールボックスを参照するのに必要な権限に許可する(4/4)

 権限の許可が完了すると、スクリプトが実行され、その結果が実行ログとして記録される。

スクリプトが正しく実行できた場合のログ スクリプトが正しく実行できた場合のログ

 実行に失敗すると、以下のようなログが記録されるので、リストを修正しよう。

スクリプト実行時にエラーが発生した場合のログ(例) スクリプト実行時にエラーが発生した場合のログ(例)

手順4――GASの「トリガー」を設定して関数を5分おきに実行するスケジュールを組む

 スクリプトを正しく実行できるようになったら、5分おきに実行して、未読メールをチェックして転送するようにスケジュールを組む(5分だと短すぎると感じるなら、10分おきでもよいだろう)。それには以下のようにGASの「トリガー」を新たに作成する。

トリガーを設定して関数を5分おきに実行するスケジュールを組む(1/2) トリガーを設定して関数を5分おきに実行するスケジュールを組む(1/2)
トリガーを設定して関数を5分おきに実行するスケジュールを組む(2/2) トリガーを設定して関数を5分おきに実行するスケジュールを組む(2/2)

手順5――トリガーが正しく動くかどうか確認する

 トリガーの設定が完了したら、その動作を確認してみよう。それには、通知の対象となり得る既存メールを1つ選んで、手動で通知用のラベルを付けつつ、既読から未読に変更する。

既存メールのラベルと未読/既読を操作してトリガーの動作を確認する 既存メールのラベルと未読/既読を操作してトリガーの動作を確認する

 その後、「時間の間隔を選択」プルダウンリストで選択した5分または10分が経過するたびに、メールが繰り返し転送されるはずだ。

GASのスクリプトとトリガーによって通知が届いたiPhoneの待ち受け画面 GASのスクリプトとトリガーによって通知が届いたiPhoneの待ち受け画面

前述のiPhoneと連携しているスマートウォッチに通知が届いたところ 前述のiPhoneと連携しているスマートウォッチに通知が届いたところ

 想定通りに通知がスマホなどに届いたら、Gmailで対象メールを開いて既読にし、通知が止まることも確認しよう。

【注意】想定通りに通知が届かないのはスマホ/スマートウォッチ/サーバのせい?

 スマホやスマートウォッチの通知設定は複雑なため、ちょっとした設定変更によって、通知が画面に表示されない、音や振動が生じない、といったトラブルが生じることがよくある。これは機種やOSの種類、バージョンなどによって対処方法も異なるため、試行錯誤せざるを得ないこともよくある。

 メール転送や通知を繰り返していると、サーバあるいはクラウドサービス側で止められてしまうこともあるようだ。例えば、1日あるいは1時間当たりの最大回数があらかじめ定められている場合、それを超えた分は強制的に止められる。前述のトリガーの設定にある「時間の間隔を選択」プルダウンリストで間隔を延ばすなどの対策が必要になるだろう。

「Tech TIPS」のインデックス

Tech TIPS

Copyright© Digital Advantage Corp. All Rights Reserved.

スポンサーからのお知らせPR

注目のテーマ

4AI by @IT - AIを作り、動かし、守り、生かす
Microsoft & Windows最前線2025
AI for エンジニアリング
ローコード/ノーコード セントラル by @IT - ITエンジニアがビジネスの中心で活躍する組織へ
Cloud Native Central by @IT - スケーラブルな能力を組織に
システム開発ノウハウ 【発注ナビ】PR
あなたにおすすめの記事PR

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。