PowerAutomateで、エクセルの一覧をつかって一斉メールを送りたい

メール送信リストに対して一斉送信をしたいというシチュエーションはよくあるでしょう。今回は条件なしに、表に記載されている宛先への一斉メール送信をしてみます。

Excel Onlineに送信先の一覧を作る

まずSPO上に送信したいメールアドレスを書いたデータを用意しました。データはテーブル化して、テーブルに名前をつけましょう。

表ができたら右上の「テーブルとして書式設定をクリック。適当なスタイルを選びます。

先頭行に見出しをつけてあるので、チェックを入れた状態で[OK]をクリック。

テーブルにカーソルを置くと、メニューに「テーブルデザイン」という項目が出るのでクリック。左上に適当なテーブル名を指定しておきます。今回は「sampleテーブル」にしました。

Excel Onlineコネクターを使う

この図ではスケジュール実行していますが、インスタントクラウドフローのほうがいいですね。何度もメールを送っちゃうので。

PowerAutomateに移って、Excel Onlineから[表内に存在する行を一覧表示]をクリックします。

先ほど作った表が入っているExcelの場所を指定します。テーブルには先ほど名前をつけたテーブル名が出てくるはずです。

※例ではスケジュール済みクラウドフローを使っていますが、今回の例の場合は何回もメールを送り付けてしまうので、インスタントクラウドフローから始めるほうが良いですね。

テストしてみる

ここまで出来たら、一度保存して「テスト」を実行してみましょう。正常に実行できました。

理解を深めるために、このExcelコネクターが何を出力したのか見てみましょう。[クリックしてダウンロードします]をクリックします。

なにやらどっさり文字が出てきました。これがJSONです。注目するのは最後のところ。value:のカッコ[]の中にメール:と名前:があります。それぞれの後ろには具体的なメールアドレスと、名前が書いてあります。

Apply to eachを使う

では、編集に戻って、新しいステップとして[組み込み]-[コントロール]-[Apply to each]を選びます。

「以前の手順から出力を選択」の欄を選択して、⚡稲妻マークをクリックすると、「表ないに存在する行を一覧」の「value アイテムの一覧」が候補として出てきますので選択します。(画面が違うよ、という方は試験的な機能を使っていないためです。こちらを参考に設定することをお勧めします。)

アクションの追加をクリックします。

ちなみに、「Apply to each」というのは、ぐるぐる回して中身を取り出すというイメージを持っておくとよいでしょう。

Outlook365コネクターを使う

Outlook365の「メールの送信(V2)」を選択します。「サインイン」を求められた場合は、認証を行ってください。

宛先欄をクリックして、⚡稲妻マークをクリックすると、候補として「表内に存在する行を一覧表示」の中に[メール]が表示されていますので、クリックします。

同様に、本文の中に宛先の名前を追加しましょう。

これで完成です。エクセルに作成したテーブルのメールアドレスに送信しますので、まずは自分宛に送信テストを行うことをお勧めします。

テストを実行したあと、各フローの右上角が緑色のチェックマークになっていれば成功です。「Apply to each」の中を開いてみると、どのような値で送信ができたかがチェックできます。

テストが成功したら、本文を修正して送信すると良いでしょう。

送信制限を意識して待機時間を設定してみる

Office365のメール送信には、送信数に関する制限がありますのでチェックしておきます。

https://docs.microsoft.com/ja-jp/office365/servicedescriptions/exchange-online-service-description/exchange-online-limits#sending-limits

1分あたり30個のメッセージという制限があります。フローは一瞬で動作するので、30件以上の宛先への送信ではそれを超えてしまう恐れがあります。念のためメールを1件送信するたびに2秒待って送信するようにしてみましょう。

編集に戻ってメール送信の下にある[アクションの追加]をクリックします。

[組み込み]-[スケジュール]-[遅延]を選択します。

待ち時間を2秒に設定してみました。

エクセルのリストからメール送信というシチュエーションはよく使うかと思います。メールの部分をTeamsのメッセージ送信に変更すれば、簡単にチャットを送信させることができます。

これで安心です。

一歩踏み込んで中身を見てみよう

宛先に追加した「メール」の部分にマウスポインターを置いてしばらく待ってみると、内部で使われている式を覗いてみることができます。itemsという関数でAplly_to_eachのなかの「メール」という値をとって来ていることがわかります。

同じように「Apply to each」の「value」にもマウスを重ねてみましょう。こちらは、前項目のエクセルコネクターの出力から、「body/value」をとってきていることがわかります。

もういちど例の出力を見てみると理解が深まります。「value」の中に「メール」がありました。ここを引っ張ってきているんですね。