PowerAutomateからのメール送信にホワイトリスト(送信しないリスト)機能を追加したい

2022/03/25

メールを一斉送信したいのだけれど、その中の一部の人には送信しなくてよい場合ってありますね。これを実現するには2つの配列の中身を比較してはみ出した部分を抽出する「差集合」という考え方をつかいます。

下の図のブルーの部分にだけ送信したいというケースへの対応です。

元ネタはこちらのQiita記事で紹介されている「Except差集合1」のリンク先のMicrosoftフォーラムの内容からです。英語なので日本語で実際に使えるようにアレンジして紹介します。

メール送信候補とホワイトリストを用意する

まずは送信先候補のアレイ、ホワイトリストのアレイをそれぞれ「変数の初期化」で作成します。

3つの送信候補がある中で、ホワイトリストにある2つのメールアドレスを除いた結果として、「c@example.com」だけにメールを送信できるようにしたいというのが、今回の目標です。

結果を保存するアレイと判定フラグのブール値変数を用意する

この先の処理で利用する変数を、さらに2つ初期化して用意しておきます。「ホワイトリスト通過したリスト」変数は、この処理の結果を保存する変数です。「exist」変数は処理の途中で存在したかしなかったか判定結果を一時的にキープしておくためのブール値です。

2重のApply to eachで回す

ここが本番。比較の処理です。Aplly to eachを二重に回しています。

ひとつめの「Apply to each」の入力は送信候補のアレイ変数です。

ふたつめの「Apply to each 2」の入力はホワイトリストのアレイ変数です。

「送信候補」のアレイからメールアドレスを一つずつ取り出し、「ホワイトリスト」の一つずつと比較をさせていることになります。その結果、ヒットしたら「exist」(ありました!)のフラグを「true」にしています。

ちなみに、trueについては、関数の入力する画面にしてから入力してあげましょう。

送信先の一つ目をホワイトリストの全部と比較した結果が、その下にさらに配置した「条件2」に渡されます。

「条件2」では、「ホワイトリストに存在した!」送信先候補のメールアドレスのうちの1つに対して、フラグが「false」であった場合は、実際に送信するメールアドレスのリストとなる「ホワイトリスト通過したリスト」変数に追加されます。

そうでなかった場合(フラグがtrueで立っている状態)は、フラグを下ろしますので、「exist」変数の値を「false」にしてやります。この場合も関数(式)入力画面でfalseとしてください。

「ホワイトリスト通過したリスト」にたまった中身を確認するために「作成」に変数を入力してやると、確かにホワイトリスト(あるいはブラックリスト・・)に存在しないメールアドレスを、送信先候補の一覧から抜き出すことができました!

ホワイトリストにSharePoint上のエクセルファイルを使う

ホワイトリストの管理は、都度PowerAutomateのフローを開いてアレイを編集するのは面倒です。SharePoint上のエクセルファイルで管理しましょう。

簡単な表をつくり、テーブル化し、「テーブルデザイン」のモードにして、左上のテーブル名をつけておきましょう。

「表内に存在する一覧表示」コネクタを使用して、先ほどつくったExcelファイルのテーブルを指定します。

「配列変数に追加」コネクタをつかって、Apply to eachで1つずつExcelから取り出した「メール」の値を追加していきます。結果として、先ほどは手で値に入力していた配列が、Excelファイルをもとにして作られる状態になります。

送信先候補もExcelファイルから取り込む

ホワイトリストの処理を流用して送信先候補もExcelファイルから取り込めるようにしました。

外側の茶色い枠は「スコープ」といって、複数の処理をまとめておける便利な箱です。これで作っておくと、同じような処理をスコープごとコピーして利用できるので便利です。

あとはメール送信処理をつくるだけ

ここまでできたら、あとは「ホワイトリスト通過したリスト」に溜まっているメール配列をApply to eachで回してoutlook365コネクタの宛先に差し込んでやればOKです。

Excel一覧から一斉メールを送信する方法も紹介しています。

メールの送信はテストする際に慎重に扱いが必要なので、「本番とテストで処理分けしたい」も参考にしていただけるとうれしいです。