【Power Automate】Formsの添付ファイルをメールで送る方法

Formsの添付ファイルをメールで送る方法

今回やりたいこと

Formsの回答に添付されたファイル(複数の場合も)をPower Automateでメールに添付して送る

こちらのMicrosoft コミュニティでも似たようなQAはありました。

複数のファイルの対応ができなかったり、やりたかったことが実現できず….

この記事では複数ファイルにも対応したフローをご紹介します!

作成したフォーム

今回作成したのは、以下のようなファイルを添付できる設問のあるフォームです。

ファイルのアップロードができるフォーム

ちなみに、ファイルをアップロードする設問は以下のような手順で作成ができます。

ファイルアップロードの設問の作成手順

この記事ではこのようなFormsの設問で添付されたファイルを取得し、メールに添付して送付する手順についてご紹介します!

あこすけ
あこすけ

では、さっそくいってみよう!

Power Automateの設定

全体の流れ

まずは全体のフローを見てみましょう!

Power automateのフローの全体図

上の図のとおり、大きく分けて3つの流れで構成されています。

  1. Formsの回答情報を取得
  2. 添付ファイル情報の取得・格納
  3. メールに添付
あこすけ
あこすけ

ひとつずつ丁寧に解説していくよ!

Formsの回答情報を取得

トリガーの設定

まずは「新しい応答が送信されるとき」を設定して、フォームが回答されたときに処理が走るようにします。

フォームの指定方法は以下の2通りがあります。

  • 選択肢から選ぶ
  • カスタム値を入力する

カスタム値はフォームを特定するIDで、フォームを開いたときのURLから取得できます。

URLの「&id=」から始まる文字列です。

フォームのURLの抜粋

コピーしたら入力欄に貼りつければOKです。

フォームIDを入力している画像

回答情報の取得

次に指定したフォームの回答情報を取得します。

「応答の詳細を取得する」を選択し、入力欄にそれぞれ以下の値を入れます。

  • フォームID ⇒ 先ほどの手順で取得したカスタム値
  • 応答ID ⇒ 動的なコンテンツから「応答ID」を選択
「応答の詳細を取得する」の画面の入力例

ここまで設定したらフローを一度保存してテストで実行してください。

そうすると、フローの実行結果を取得できます。

「応答の詳細を取得する」の出力で、ファイル添付の結果が「[{“name”:」で始まっているのでこれをコピーします。

テストの結果の出力画面
パパ
パパ

この値を使って後で添付ファイルの情報を取得するよ!

添付ファイルの情報を取得

JSON解析する

先ほどコピーした添付ファイルの情報は名前付きの配列(=コレクション)の形式です。

この情報を取り出すために「JSONの解析」のアクションを追加します。

「JSONの解析」のアクション

「コンテンツ」の欄には動的なコンテンツから添付ファイルの設問を選択してください。

「スキーマ」の欄は、下にある「サンプルから生成」をクリックし、先ほどコピーした文字列を貼り付けます。

コピーした文字列の貼り付け

ファイル情報を取り出す

次に添付ファイルの情報を取り出していくのですが、添付ファイル情報を格納するための配列を定義します。

「変数を初期化」のアクションを選択し、以下のように入力してください。

  • 名前 ⇒ 変数の名前
  • 種類 ⇒ 「アレイ」を選択
  • 値 ⇒ 空欄のまま

「アレイ」は配列のことです。詳しい説明は省きますが、情報を入れる「箱」だと思ってください。

次に「作成」のアクションを追加します。

「作成」のアクション

動的なコンテンツからJSONの解析の結果をどれでもいいので選択します。

動的なコンテンツの一覧からJSONの解析の結果を選択

するとアクションが突然「apply to each」の中にある状態になります。

「Apply to each」が追加された

これは添付ファイルが複数ある可能性があるためです。

ふたつファイルが添付されていれば当然ファイル名もふたつあるのでそれぞれを処理することになります。

次に「作成」の入力欄に以下の式を入れてください。

入力する式

items(‘Apply_to_each’)?[‘name’]

式を入力

items(‘Apply_to_each’)は複数の添付ファイルのうちの特定のひとつを差していて、[‘name’]でそのファイル名を取り出しています。

これで添付ファイルのファイル名を取り出すことができました。

Apply to eachについては以下の記事が非常にわかりやすかったので詳しく知りたい方はご覧ください。

パスからファイルコンテンツを取得

次に先ほど取得したファイル名を使って、添付ファイルをコンテンツとして取り出します。

パパ
パパ

ちなみにFormsで添付されたファイルはどこに保存されているでしょうか?

答えは「SharePoint」の中です(個人のフォームならOneDrive)。

添付ファイルの保存場所について詳しく知りたい方は以下の記事をどうぞ!

このSharePointに保存されたファイルのパスを指定することでファイル情報を取得します。

「パスによるファイルコンテンツの取得」を追加しましょう。

「パスによるファイル コンテンツの取得」のアクション

まず、「サイトのアドレス」はグループフォームを作成したときのグループを選択してください。

次にファイルパスは以下のように指定してください。

パスの指定

/Shared Documents/アプリ/Microsoft Forms/”フォーム名”/”設問名”/”ファイル名”

最後のファイル名以外は手入力で入れて最後のファイル名のみ、動的なコンテンツで指定しましょう。

ファイルパスを指定する画面

これで添付ファイルを取得できました!

ファイル情報をJSONに格納

取得したファイルを先ほど作成した変数に入れていきます。

「配列変数に追加」のアクションを追加しましょう。

「配列変数に追加」のアクション

添付ファイル情報の追加方法は決まっていて以下のようにしてきます。

添付ファイル情報(配列)の追加方法

{
“name”: “ファイル名”,
“contentBytes”: “ファイルコンテンツ”
}

「ファイル名」と「ファイルコンテンツ」は動的なコンテンツから選びましょう。

配列変数への追加

これで添付ファイルの情報を取得することができました!

あこすけ
あこすけ

これでファイルの取得はバッチリ!

Outlookにファイルを添付して送る

最後の工程です!取得したファイルをメールに添付して送りましょう!

メールを送るには「メールの送信(V2)」のアクションを追加します。

「メールの送信(V2)」アクション

添付ファイルの設定方法はふたつ

添付ファイルの設定方法は以下のふたつです。

  • 添付ファイルをひとつずつ設定する
  • 配列に入れて一度に指定する(今回はこっち)

今回は添付ファイルの数が不確定なので後者の方法になります。

複数のファイルを添付するとき

まずは「詳細オプションを表示する」を選択してすべての項目を表示させます。

配列で添付ファイルを指定する場合は、ファイル添付表示の右上にあるマークをクリックします。

添付ファイルの表示の右上のマーク

入力欄には先ほどファイル情報が入った配列変数を動的なコンテンツから選択します。

配列変数を指定

あとは、メールに宛先や件名、本文など必要な情報を入力して完成です!

パパ
パパ

実際に実行して確認してね!

(補足)より実用的なフローにするために

ここからはより実用的に使えるフローにするための改良方法をご紹介します!

添付ファイルがない場合のエラー対応

まず、先ほど作成したフローは添付がないときにエラーになります。

パパ
パパ

「JSONの解析」で解析するものがなくなってしまうからだね

対処方法として、「条件」のアクションを追加して分岐を作ります。

フローに条件分岐を追加

「条件」アクションには具体的に以下のように入力します。

  • 左側の項目 ⇒ 「応答の詳細を取得する」のファイル添付の設問の出力
  • 真ん中の項目 ⇒ 「次の値に等しくない」
  • 右側の項目 ⇒ 空欄のまま

これで添付ファイルがあるときだけ、JSONの解析がされるようになりました。

今回はこれで以上です!おつかれさまでした!