Power Automateで事前設定したタイミングに通知メールを送る

Power Automateの通知は日ごと、週ごと、曜日ごとなどのタイミングでスケジュールを設定して繰り返し実行することが出来ます。

ただし、「9/24 11:00 - 12:00の説明会参加者には9/19に、10/3 13:00 - 14:00の説明会参加者には10/1に通知をしたい」というような、事前設定したタイミングでの通知をしたい場合は工夫が必要になります。

実現可能な方法の一つとして、一旦スケジュールを定期的に実行した上で、別途用意した「通知日と参加日程の対応表」を読み取って判断する、というフローを作成しました。

本記事では、Power Automateで事前設定したタイミングに通知メールを送る方法について解説します。

※ なお、本記事はPower Automateでのフロー作成をある程度経験している方を想定しています。そのため、アクションの追加方法など詳細な手順は割愛しています。

想定シナリオ

今回は、以下のシナリオを想定しています。

  • 部門向け説明会を同内容で複数回実施する予定がある
  • 参加者向けにアンケートを取得済みで、参加者リストが用意できている
  • 参加日程が近くなったら対象者へ通知を送りたい
  • 通知日は、土日や祝日も加味してタイミングを決めたいので、一律で「3日前」のような設定は出来ない
  • 通知時刻は一律で午前10時とする

事前準備

想定シナリオで記載の通り、今回は既にExcelで下記の様な「参加者リスト」テーブルを作成済みです。

表示名 メールアドレス 部署名 役職名 参加日程
Example User01 user01@example.com 人事部 課長 9/8 15:00-16:00
Example User02 user02@example.com 営業部 部長 10/3 13:00-14:00
Example User03 user03@example.com 総務部 主任 9/24 11:00-12:00
Example User04 user03@example.com 技術部 係長 9/8 15:00-16:00

また、「通知日」テーブルも事前に準備しました。

参加日程 通知日
9/8 15:00 - 16:00 9月3日
9/24 11:00 - 12:00 9月19日
10/3 13:00 - 14:00 10月1日

フローの作成

トリガーを設定する

トリガーは「繰り返し」を使用します。今回、通知日が決まった曜日にはならない想定ですが、少なくとも土日に通知する事は無いので以下の設定とします。

  • 間隔:1週
  • タイムゾーン:UTC+09:00
  • これらの曜日に:月、火、水、木、金
  • これらの時間に:10
  • これらの分に:0

フロー実行時の日時を取得する

後続の処理で利用するため、「タイム ゾーンの変換」アクションでフロー実行時の日時を取得し、日本時間に変換したうえで日時フォーマットを変換しておきます。

  • Base time:utcNow() ※ 式として入力
  • Source time zone:UTC
  • Destination time zone:UTC+09:00
  • Time unit:yyyy-MM-ddT00:00:00.000Z ※ カスタム値として入力

Excelから通知日テーブルを読み込む

Excelの「表内に存在する行を一覧表示」アクションを利用し、事前に用意した通知日テーブルを読み取ります。

この際、DataTime形式は必ず「ISO 8601」を選択してください。

※ DataTime形式を既定値にすると、日付を「45678」の様なシリアル値で取得してしまい、後続の日付でのフィルター処理が失敗する原因となります

アレイのフィルター処理で通知日かどうかを判定する

後続の処理で、フロー実施日が通知日かどうかを判定するために、まずは通知日テーブルの中にフロー実行日があるかどうかをフィルタします。

「アレイのフィルター処理」を以下のように設定します。

  • From
    • body/value:「表内に存在する行を一覧表示」アクションより
  • Filter Query
    • 通知日:「表内に存在する行を一覧表示」アクションより
    • 等しい
    • Converted time:「タイム ゾーンの変換」アクションより

※ 検証時、アレイのフィルター処理がforeachに入ってしまう事がありましたが、ドラッグしてforeachの外に出すことで問題なく動作しました

フィルター結果を元に通知日かどうかを判断する

「アレイのフィルター処理」の結果を元に、条件アクションで通知を行うかどうかを判断します。

  • empty(body('アレイのフィルター処理:通知日の判定')) ※ 式として入力
  • 等しい
  • true ※ 文字列として入力

条件に合致した場合、つまり「アレイのフィルター処理で結果が空の場合」は通知日テーブルの中にフロー実行日は無いことになるので、Trueの場合は「終了」アクションで処理を停止します。

フィルター結果を解析する

ここからは、通知日として判断された後の処理になります。

「アレイのフィルター処理」で通知日が存在する場合、以下の様なjson形式でデータを取得できます。

{
    "body": [
        {
            "@odata.etag": "",
            "ItemInternalId": "***-***-***-***-***",
            "参加日程": "9/8 15:00 - 16:00",
            "通知日": "2025-09-03T00:00:00.000Z"
        }
    ]
}

この後、Excelの「参加者リスト」テーブルから、対象の「参加日程」のデータだけを抽出したいので、フィルタしたデータの「参加日程」の値を利用できするようにします。

そのために「JSON の解析」アクションを作成して設定します。アクションとしては下図のようになりますが、各要素をもう少し詳細に解説します。

Content

アレイのフィルター処理で抽出した結果を指定します。

「通知日」テーブルに重複はない想定で作成していますが、データの扱いとしては配列形式となっています。そのため、そのまま指定するとforeachが自動で設定されてしまい、正常に解析できません。

そこで、first関数を利用して以下のように設定します。

first(body('アレイのフィルター処理'))
Schema

先ほどの「アレイのフィルター処理」の結果のうち、bodyの内部のみ利用して、サンプル ペイロードとして設定します。

実際にサンプル ペイロードとして貼り付ける内容の例です。

        {
            "@odata.etag": "",
            "ItemInternalId": "***-***-***-***-***",
            "参加日程": "9/8 15:00 - 16:00",
            "通知日": "2025-09-03T00:00:00.000Z"
        }

生成されたスキーマです。

{
    "type": "object",
    "properties": {
        "@@odata.etag": {
            "type": "string"
        },
        "ItemInternalId": {
            "type": "string"
        },
        "参加日程": {
            "type": "string"
        },
        "通知日": {
            "type": "string"
        }
    }
}

Excelから参加者テーブルを読み込む

Excelの「表内に存在する行を一覧表示」アクションを再度利用し、今度は参加者テーブルを読み取ります。

その際、先ほどフィルター結果を解析して取得した「参加日程」のデータを使って、取得するデータを絞り込みます。また、先ほど同様、DataTime形式も「ISO 8601」を選択しておきます。

「詳細パラメーター」の設定は下記の通りです。

  • フィルター クエリ:参加日程 eq 'Body 参加日程' ※ アレイのフィルター処理の結果を指定
  • DateTime 形式:ISO 8601

対象者にメールを送信する

あとは、読み込んだ対象者に対して「メールの送信 (V2)」でメールを送ります。

ここまで取得した情報を使って、適宜宛先や件名、本文を設定してください。

※ こちらも検証時に意図せずforeachに入ってしまう事がありましたが、ドラッグしてforeachの外に出すことで問題なく動作しました

動作確認

ここまででフローが完成しました。

本来はスケジュール実行となりますが、今回はテスト実行してみます。

送信済みアイテムを確認すると、通知メールが送られていることを確認できました。

最後に

「通知日」テーブルを使えば任意のタイミングで通知が出来るであろう、というところまではすぐ思いついたのですが、いざ実装しようとするとアレイのフィルターJSONの解析なども駆使しないと実現が出来ず、想定よりも苦労しました。

なお、このフローは作成後は定期的に実行されてしまうので、通知日対象が無くなっても動き続けてしまいます。役割を終えたらオフにしたり削除したりすることをお勧めします。

執筆担当者プロフィール
舟越 匠

舟越 匠(日本ビジネスシステムズ株式会社)

人材開発部に所属。社内向けの技術研修をしつつ、JBS Tech Blog編集長を兼任。Power AutomateやLogic Appsが好きで、キーマンズネットPower Automateの記事を書いたり、YouTubeのTechLIVE by ITmediaチャンネルPower Automateの動画に出演したりもしています。好きなアーティストはZABADAKとSound Horizon。

担当記事一覧