Power AutomateでOutlookのメールを一斉自動送信する方法

Outlookのメールを一斉・自動送信したいなら、Power Automate(クラウド版)とExcelの組み合わせが手軽です。送信リストをExcelに用意しておけば、フローを起動するだけでまとめて送信が完了し、1通ずつコピー&ペーストする手間をなくせます。

Power AutomateでExcelリストをもとにOutlookのメールを一斉自動送信するフロー設定画面

対象OS Windows 11

Outlookで一斉送信・自動化したい——RPAツール(Power Automate)という選択

「100人にメールをまとめて送りたい」——そんな場面で、1通ずつ宛先を入力してOutlookで送り続けた経験はないでしょうか。件数が増えるほど作業時間はかさみ、送り漏れや誤送信のリスクも高まります。

筆者は現在担当しているプロジェクトで、一度に数千人へ通知メールを一斉送信する業務を定期的に行っています。手動での対応はもちろん不可能で、自動化の仕組みがなければ成立しない作業量です。社内で利用できるツールはMicrosoftのPower Platformが中心だったため、Power Automateでの自動送信を選択し、現在も実運用で活用しています。

先日、別の部門からも「同じようにOutlookでまとめて自動送信したい」という相談を受けたため、この機会に手順をまとめることにしました。

この記事では、クラウド版 Power Automateを使った一斉自動送信の手順を紹介します。デスクトップ版(Power Automate Desktop)でも同じことができますが、画面や設定は異なります。なお、クラウド版にはAPI呼び出し回数の上限があるため、数百件を超える送信が必要な場合はデスクトップ版の利用を検討してください(デスクトップ版の手順はこちら)。完成したフローの構造・設定値・参考コードも、記事の後半にまとめています。

一度フローを作成してしまえば、次回以降はExcelを更新してボタンを押すだけです。月1回100件の一斉送信作業であれば、手作業の2〜3時間が毎回5分以内に収まります。

始める前に:Outlookの一斉自動送信に必要な環境

以下の環境と準備が整っていることを確認してください。

  • Microsoft 365(Business BasicまたはStandard以上)のアカウント
  • OutlookアカウントがMicrosoft 365に紐づいていること
  • 送信リストのExcelファイルがOneDrive for BusinessまたはSharePointに保存されていること

ExcelファイルはOneDriveまたはSharePoint上に保存する必要があります。ローカルPC上のExcelファイルは、Power Automateクラウド版から直接読み込めません。

Power Automateクラウド版のAPI呼び出し上限は、プランによって異なります。Microsoft 365 Business Basicでは1日あたり約6,000リクエストが目安です。Excelの行数(送信件数)×フロー内のアクション数がこの上限を超えると、その日の処理が途中で止まります。数百件を超えるメールをまとめて送信したい場合は、Power Automate Desktop(デスクトップ版)の利用を検討してください。

一斉送信用のExcelリストを準備する

まとめて送信する宛先・件名・本文のデータをExcelに入力し、テーブル形式に変換してOneDriveに保存します。テーブル形式への変換を忘れると、Power Automateがデータを読み込めないため必ず行ってください。

  1. Excelを開き、1行目に列見出しを入力します。最低限、以下の列が必要です。

    ・メールアドレス(メールの宛先です)
    ・件名(全て同じ件名でメールを送信する場合は不要です)
    ・送信メッセージ(メール本文です)
  2. 2行目以降に送信先のデータを入力します。
  3. データ範囲(見出し行を含む)を選択し、リボンの「挿入」→「テーブル」をクリックします。「先頭行をテーブルの見出しとして使用する」にチェックが入っていることを確認して「OK」をクリックします。
  4. Excelでメール一斉送信リストをテーブル形式に変換した画面
  5. ファイルをOneDrive for Business(またはSharePoint)に保存します。

範囲のままだとPower Automate側で読み込めません。必ず「挿入」→「テーブル」からテーブルに変換してください。

Power Automateで自動送信フローを新規作成する

Power Automate(make.powerautomate.com)にサインインし、手動で起動できるフロー(インスタントクラウドフロー)を作成します。

  1. 左サイドバーの「作成」をクリックします。
  2. 「インスタントクラウドフロー」を選択します。
  3. 任意のフロー名を入力し、トリガーの一覧から「フローを手動でトリガーする」を選択して「作成」をクリックします。
  4. Power Automateでインスタントクラウドフローを新規作成する画面

ExcelのリストをPower Automateで読み込む

フローにExcelコネクタを追加し、準備した送信リストのデータを読み込む設定を行います。

  1. フロー編集画面で「+新しいステップ」をクリックします。
  2. 検索ボックスに「Excel」と入力し、「Excel Online (Business)」を選択します。
  3. アクションの一覧から「表内に存在する行を一覧表示」を選択します。
  4. 各フィールドを次のように設定します。

    ・場所:OneDrive for Business(またはSharePoint)
    ・ドキュメントライブラリ:ドキュメント
    ・ファイル:準備して保存したExcelファイルを選択
    ・テーブル:作成したテーブル名を選択
  5. Power AutomateでExcel Online (Business)の送信リストを読み込む設定画面

Outlookのメール自動送信アクションを設定する

「Apply to each(それぞれに適用する)」コントロールを使い、Excelの各行のデータをOutlookのメール送信アクションに渡します。このコントロールがリストの全件をまとめて処理するループの核になります。

  1. 「+新しいステップ」をクリックし、「コントロール」→「それぞれに適用する」を選択します。
  2. 「前のステップから出力を選択します」のフィールドをクリックします。
  3. マークをクリックし、表示された動的なコンテンツの中から、表内に存在する行を一覧表示の項目にある「body/value」を選択します。
  4. 「それぞれに適用する」の枠内の「アクションの追加」をクリックします。
  5. 検索ボックスに「Outlook」と入力し、「Office 365 Outlook」→「メールの送信 (V2)」を選択します。

    アクション一覧の中に「メールの送信 (V2)」が表示されていない場合は、項目右上にある「詳しく見る」をクリックし、すべてのアクションを表示させてください。

  6. 各フィールドに動的なコンテンツ(マークをクリックして表示します)からExcelの列を紐付けます。(一覧に該当する項目がない場合は、項目の右上にある「表示数を増やす」をクリックしてください)

    ・宛先:動的なコンテンツから「メールアドレス」(Excelの宛先列)を選択
    ・件名:動的なコンテンツから「件名」を選択(件名が固定の場合は直接入力)
    ・本文:動的なコンテンツから「送信メッセージ」を選択
  7. Power AutomateのApply to each内でOutlookのメール自動送信アクションを設定した画面

- メールの件名や本文を固定で送信する場合は、「件名」、「本文」のそれぞれのフィールドに直接テキストを入力しても構いません。
- CCやBCC、添付ファイルなどを追加したい場合は、詳細パラメーターの項目横にある「すべて表示」ボタンをクリックしてください。

テスト実行して一斉送信の動作を確認する

フローを保存し、テスト実行で実際にOutlookからメールが自動送信されることを確認します。本番データで実行する前に、Excelに自分宛てのテスト行を1件だけ追加して動作確認することを強くお勧めします。テスト実行は実際にメールが送信されます。

  1. 画面右上の「保存」をクリックします。
  2. 「テスト」をクリックし、「手動」→「テスト」の順に選択して実行します。
  3. 各ステップにチェックマークが表示され、Outlookの送信済みアイテムでメールが確認できれば完了です。問題がなければ、Excelシートを本番の送信リストに差し替えて本番実行します。

完成したフローの構造(図・設定値・参考コード)

ここまでの手順で完成したフローは、トリガー1つとアクション3つ(ループを含む)でできています。画面での操作と、Power Automateの内部データ(JSON)との対応を知っておくと、フローの修正や不具合の切り分けがしやすくなります。

フローの流れ

トリガー
フローを手動でトリガーする
ボタンを押して起動します
アクション
表内に存在する行を一覧表示
Excel Online (Business):テーブルの全行を取得します
ループ
それぞれに適用する
取得した行を1行ずつ繰り返し処理します
アクション
メールの送信 (V2)
Office 365 Outlook:1行につき1通のメールを送信します

各要素の対応表

画面に表示される名前と、JSONの中での名前・操作IDの対応です。

順序画面上の名前 / JSON上の名前コネクタ・操作ID役割
1
トリガー
フローを手動でトリガーする
manual
組み込み
Request / Button
ボタンを押して手動で起動します。入力項目はありません
2
アクション
表内に存在する行を一覧表示
表内に存在する行を一覧表示
Excel Online (Business)
GetItems
Excelのテーブルの全行を取得します
3
ループ
それぞれに適用する
それぞれに適用する
組み込み
Foreach
取得した行を1行ずつ処理します。直前のアクションが成功(Succeeded)したときだけ実行されます
4
ループ内
メールの送信 (V2)
メールの送信_(V2)
Office 365 Outlook
SendEmailV2
1行につき1通のメールを送信します

各アクションの設定値一覧

手順で入力した項目が、JSONのどのキーに対応するかを一覧にしました。

項目(JSONのキー / 画面上の項目名)設定値備考
表内に存在する行を一覧表示
source
場所
OneDrive for Businessコード上は me と記録されます
drive
ドキュメントライブラリ
<ドライブID>保存先ライブラリの識別子。環境ごとに異なります
file
ファイル
<ファイルID>選択したExcelファイルの識別子
table
テーブル
<テーブルID>選択したテーブルの識別子
それぞれに適用する
foreach
前のステップから出力を選択します
@outputs('表内に存在する行を一覧表示')?['body/value']動的なコンテンツ「body/value」に相当します
メールの送信 (V2)
emailMessage/To
宛先
@items('それぞれに適用する')?['メールアドレス']Excelの列「メールアドレス」
emailMessage/Subject
件名
ご連絡(サンプル件名)固定の文字列です。Excelの列から差し込む場合は動的なコンテンツを指定します
emailMessage/Body
本文
<p class="editor-paragraph">@{items('それぞれに適用する')?['送信メッセージ']}</p>Excelの列「送信メッセージ」。本文はHTML形式で保存されます
emailMessage/Importance
重要度
Normal詳細オプションの項目です

使用する接続

接続参照名コネクタ使用するアクション
shared_excelonlinebusinessExcel Online (Business)表内に存在する行を一覧表示
shared_office365Office 365 Outlookメールの送信 (V2)

※ authentication(接続の認証に使う式)と runAfter(実行順)はPower Automateが自動で設定する項目のため、通常は編集しません。connectionName は環境ごとに自動生成されるため <接続名> に置換しています。

参考:フローのコード(JSON)

このコードは、フローの構造を理解するための参考コードです。Power Automateにそのまま貼り付けたり、インポートしたりして使うことは想定していません。ファイルID・ドライブID・接続名は環境ごとに異なるため、<ドライブID> のようなプレースホルダーに置き換えています。実際のフローは、上の手順に沿って画面から作成してください。

コードは次のように読み取れます。

  • triggers:フローの起動方法です。ここではボタンによる手動起動(manual)です。
  • actions:実行する処理です。runAfter が「どの処理のあとに実行するか」を表します。
  • foreach:ループで繰り返す対象です。ここでは取得したExcelの行(body/value)です。
  • @items('それぞれに適用する')?['メールアドレス']:ループ中の現在の行から、Excelの列「メールアドレス」の値を取り出す式です。
{
  "properties": {
    "displayName": "メールの一斉送信",
    "definition": {
      "$schema": "https://schema.management.azure.com/providers/Microsoft.Logic/schemas/2016-06-01/workflowdefinition.json#",
      "contentVersion": "undefined",
      "parameters": {
        "$authentication": {
          "defaultValue": {},
          "type": "SecureObject"
        },
        "$connections": {
          "defaultValue": {},
          "type": "Object"
        }
      },
      "triggers": {
        "manual": {
          "type": "Request",
          "kind": "Button",
          "inputs": {
            "schema": {
              "type": "object",
              "properties": {},
              "required": []
            }
          }
        }
      },
      "actions": {
        "表内に存在する行を一覧表示": {
          "runAfter": {},
          "type": "OpenApiConnection",
          "inputs": {
            "parameters": {
              "source": "me",
              "drive": "<ドライブID>",
              "file": "<ファイルID>",
              "table": "<テーブルID>"
            },
            "host": {
              "apiId": "/providers/Microsoft.PowerApps/apis/shared_excelonlinebusiness",
              "connectionName": "shared_excelonlinebusiness",
              "operationId": "GetItems"
            },
            "authentication": {
              "value": "@json(decodeBase64(triggerOutputs().headers['X-MS-APIM-Tokens']))['$ConnectionKey']",
              "type": "Raw"
            }
          }
        },
        "それぞれに適用する": {
          "foreach": "@outputs('表内に存在する行を一覧表示')?['body/value']",
          "actions": {
            "メールの送信_(V2)": {
              "type": "OpenApiConnection",
              "inputs": {
                "parameters": {
                  "emailMessage/To": "@items('それぞれに適用する')?['メールアドレス']",
                  "emailMessage/Subject": "ご連絡(サンプル件名)",
                  "emailMessage/Body": "<p class=\"editor-paragraph\">@{items('それぞれに適用する')?['送信メッセージ']}</p>",
                  "emailMessage/Importance": "Normal"
                },
                "host": {
                  "apiId": "/providers/Microsoft.PowerApps/apis/shared_office365",
                  "connectionName": "shared_office365",
                  "operationId": "SendEmailV2"
                },
                "authentication": {
                  "value": "@json(decodeBase64(triggerOutputs().headers['X-MS-APIM-Tokens']))['$ConnectionKey']",
                  "type": "Raw"
                }
              }
            }
          },
          "runAfter": {
            "表内に存在する行を一覧表示": [
              "Succeeded"
            ]
          },
          "type": "Foreach"
        }
      }
    },
    "connectionReferences": {
      "shared_excelonlinebusiness": {
        "connectionName": "<接続名>",
        "source": "Invoker",
        "id": "/providers/Microsoft.PowerApps/apis/shared_excelonlinebusiness",
        "tier": "NotSpecified",
        "apiName": "excelonlinebusiness"
      },
      "shared_office365": {
        "connectionName": "<接続名>",
        "source": "Invoker",
        "id": "/providers/Microsoft.PowerApps/apis/shared_office365",
        "tier": "NotSpecified",
        "apiName": "office365"
      }
    }
  }
}

こんなときは:よくあるつまずきポイントと対処法

実際に設定した際に詰まりやすいポイントをまとめました。自動送信がうまくいかないときはここから確認してください。

  • テーブル選択時に候補が表示されない
    原因:Excelファイルがテーブルではなく範囲のままになっているか、ローカルに保存されている。
    → 「挿入」→「テーブル」でテーブル形式に変換し、OneDriveに保存し直してください。
  • 動的なコンテンツにExcelの列名が表示されない
    原因:前のステップの「表内に存在する行を一覧表示」でファイルやテーブルが未選択の状態になっている。
    → 前のステップに戻り、ファイルとテーブルが正しく選択されているか確認してください。
  • フローが途中で止まる(エラーコード 429)
    原因:クラウド版のAPI呼び出し上限を超えた。
    → 「メールの送信」の後に「遅延」アクション(1〜2秒)を追加してリクエストを分散させるか、まとめて送信する件数が多い場合はPower Automate Desktopへの移行を検討してください。
  • 本文の改行が消える、または <br> タグがそのまま表示される
    原因:「メールの本文はHTMLです」がオフになっている。
    → 「詳細オプションを表示する」から「メールの本文はHTMLです」をオンにしてください。

実際に運用してみて実感したのは、最初のフロー作成に30分ほどかかっても、一度作ってしまえば次回以降はExcelのリストを更新してボタンを押すだけで一斉送信が完了するということです。月1回100件のメールをまとめて送る作業であれば、手作業の数時間が毎回5分以内に収まります。この記事の手順で解決しない場合は、Excelのテーブル設定とOneDriveへの保存状態を最初に確認してみてください。

送信件数が多い場合は、クラウド版の呼び出し回数の上限を受けないデスクトップ版もあわせてご覧ください。

確認 Power AutomateでOutlookのメールを一斉自動送信する方法(デスクトップ版)

確認 Outlookの下書きフォルダのメールをVBAマクロで一斉送信する方法

確認環境 Windows 11 / Power Automate(クラウド版)/ Microsoft 365 Business Basic / Excel for Microsoft 365(フローの構造・コードの確認日:2026年10月11日)

最終更新 2026年10月

関連サイト(外部)

Power Automate のドキュメント — Microsoft Learn

関連記事