#PowerAutomate 複数添付ファイル付きメールを送信する

Power Automate でメール送信する際、複数ファイルを添付する方法です。

# 説明の前提
当記事で説明するフローの内容は「SharePoint Online（以降、SPO）のリストへ既に登録されている添付ファイル」を取得して [メールの送信]アクションで複数ファイルをまとめて1通のメールへファイル添付してメール送信する、という流れになっています。
![03-SPOList.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/215892/f598c5ab-6df6-55aa-f96e-2efe9506e18e.png)
上イメージのアイテムが、末尾の動作結果で登場します。

# フローの全体像
皆さんが実現したいコトにあわせて適宜変更してくださいね。
![01-zentai.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/215892/4da19ed1-c414-883e-a7fa-aded8a39f319.png)
実際に試してみるとスグにわかると思いますので SPO リストから”SPO アイテム上の添付ファイルを Apply to each でコンテンツ取得している箇所”の説明は割愛します。

# 添付ファイルを配列に退避
複数ファイルが添付されたメール送信をしたい場合のポイントは配列です。変数で配列（Array）を用意して、ファイルコンテンツを取得した結果を格納していきます。
[配列変数に追加]アクションの値は下記のように設定してください。
![02-AddArray.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/215892/120cecc1-8e85-5500-003e-746b758f19d8.png)
JSON 形式です。"name" に拡張子込みのファイル名、"contentBytes" には取得したファイルコンテンツを指定します。

```
      {
        "name": "[ファイル名(※拡張子込み)]",
        "contentBytes": "[ファイルコンテンツ]"
      }
```

このように JSON 形式でファイル名・ファイルコンテンツを配列に詰めています。メールの添付ファイルについて、参考までに Graph API の Docs を参照して JSON を確認してみましょう。

https://docs.microsoft.com/ja-jp/graph/api/message-post-attachments?view=graph-rest-1.0&tabs=http&WT.mc_id=BA-MVP-5004053#request
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/215892/660fb89b-a1f3-ba0e-ab1f-c4d0f002a99f.png)
先ほどフローで指定した内容と、ほぼ同じですよね。
ちなみに、記事投稿時点（2022/03/15）で、Docs では記載されている "type" は無しで問題なく動作します。フローの実行結果をみると Graph API の Docs と若干異なるカタチになっていますが、"contentBytes"の中にコンテンツタイプが設定されているのが確認できます。なので、大丈夫なのだろうと個人的には考えています。
![08-実行結果抜粋.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/215892/8918bdaa-2d01-ff99-09ab-5e37020239b9.png)

# [メールの送信]アクションのポイント
ここまでの処理で、メールに添付したいファイルが格納された配列が準備できました。その配列を[メールの送信]アクションに渡してあげる必要があります。アクションが初期状態のままだと、添付ファイルを1つずつ追加していく状態になっています。
その添付ファイル要素の右端にある四角に T が書かれているアイコンをクリックしてください。
![06-SendMailAction.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/215892/91be733b-595f-c670-1df8-4b81c6956430.png)
そうすると、添付ファイルを指定する場所が 1 つに変わります。
![07-SendMailAction.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/215892/3d70d0b6-789b-9450-591a-73622a59c293.png)
ここに、準備した配列を指定してあげれば OK です！

# メール送信結果
下イメージはフローからメール送信された側（＝受信者）のスクリーンショットです。メールへ複数添付ファイルがある状態で届いてますね。
![04-email.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/215892/c2f13d85-8d81-0d4b-3460-317ed29d10d8.png)
配列に送信したいファイルを突っ込んで、メール送信する際に配列を渡してヨシ！です。
# まとめ
当方の過去経験談なんですが、C# 等の開発言語で [EWS で添付ファイル付きメールを送信する](https://docs.microsoft.com/ja-jp/exchange/client-developer/exchange-web-services/how-to-add-attachments-by-using-ews-in-exchange?WT.mc_id=BA-MVP-5004053) 際は、

1. Message オブジェクトを作る
2. 件名(Title) や 本文(Body) 、宛先(To)などを詰める
3. 添付ファイルを配列ぽく追加する（Array へ Add)
4. 送信する

といった手順だったと記憶しておりまして。（随分前の記憶なので少々間違っているかも）
Power Automate でも同じような仕組みで配列にまとめてドーン！だろう、と予想して試してみたらビンゴだった、という感じです。加えて JSON 書かないとダメな予感もしていたのですが、そちらも調べて試したら正解でした。もちろん、実際に意図した動作をするまで試行錯誤してますが、話すと長くなるので割愛。裏の処理で動いているのは API ですから「自分がやりたいコト・実現したいコト」に関連する Graph API も確認すると幸せになれる可能性があるな、と思いました。

当記事の説明は SPO リストに登録済みの添付ファイルを利用しましたが、他の手段であってもファイル名とファイルのコンテンツ(中身)が把握できていれば問題無く動作すると思います。

それでは皆さま、素晴らしい Power Platform Life を！！