Power AutomateとExcelを使って共有可能な一括メール送信機能を作成する

# はじめに

*Word for Microsoft 365*に[宛名の差し込みを使用して一括メール メッセージを送信する](https://support.microsoft.com/ja-jp/office/%E5%AE%9B%E5%90%8D%E3%81%AE%E5%B7%AE%E3%81%97%E8%BE%BC%E3%81%BF%E3%82%92%E4%BD%BF%E7%94%A8%E3%81%97%E3%81%A6%E4%B8%80%E6%8B%AC%E3%83%A1%E3%83%BC%E3%83%AB-%E3%83%A1%E3%83%83%E3%82%BB%E3%83%BC%E3%82%B8%E3%82%92%E9%80%81%E4%BF%A1%E3%81%99%E3%82%8B-0f123521-20ce-4aa8-8b62-ac211dedefa4)という機能は存在しますが、所属する組織の中では、それぞれの書式に基づき、メールを配信したいというニーズがあります。

`一括メール配信`となると*Outlook VBA*や*RPA*を使った処理が選択肢として浮かびます。
しかしながら引継ぎがなんだといった課題や*RPA*は共有するための処理など手間が発生しがちです。

*Power Automate*芸人として今回は`共有メールボックス`にメールのひな型を設け、
`共有メールボックス`から対象者に決められた`雛形`の内容を置き換え、メールを配信する機能を考えてみました。

# 要件
今回のテーマとして`共有メールボックス`から雛形を取得し、*Excel*の記載内容に基づきメール配信をします。

- `共有メールボックス`にPower Automateのフロー所有者がアクセス可能
- 雛形に付帯する`メールフォルダ`、`メールの件名`は統一されている前提で記載します


:::note warn
- 共有メールボックスは`Microsoft 365管理センター`で設定します
- 今回例で作成した共有メールボックスは*PublicTeam*という名前で設けています
:::

## 下準備
配信するメールは下記の内容です。

`タイトル` - `【重要】{Date}_株式会社GATSUO_FY20241Q総決算会議`

```plaintext:メール本文
{name} さん

お疲れ様です。
総務伝達係のDe'modori Gatsuoです。

この度、FY20241Q総決算会議の連絡です。
最後まで目を通してください。

日付
{Date}
時間
{DateTime}
場所
{Place}


会議の出席確認と円滑な進行のため、以下のアンケートフォームにご回答いただきたくお願い申し上げます。
アンケートの回答締め切りは {Deadline} です。

アンケートフォーム: 
DEmodoriGatsuO - Qiita

お忙しいところ恐縮ですが、皆様のご協力をお願いいたします。

何かご不明点やご質問がございましたら、お気軽にご連絡ください。

皆様のご参加を心よりお待ちしております。

FY20241Q総決算会議
De'modori Gatsuo
```

<details><summary>htmlは長いのでおりたたみ</summary>

```html:本文
<body dir="ltr">
    <div class="elementToProof"
        style="font-family:Aptos,Aptos_EmbeddedFont,Aptos_MSFontService,Calibri,Helvetica,sans-serif; font-size:12pt;
        color:rgb(0,0,0)">{} さん</div>
    <div style="font-family:Aptos,Aptos_EmbeddedFont,Aptos_MSFontService,Calibri,Helvetica,sans-serif; font-size:12pt;
        color:rgb(0,0,0)"><br></div>
    <div class="elementToProof"
        style="font-family:Aptos,Aptos_EmbeddedFont,Aptos_MSFontService,Calibri,Helvetica,sans-serif; font-size:12pt;
        color:rgb(0,0,0)">お疲れ様です。</div>
    <div class="elementToProof"
        style="font-family:Aptos,Aptos_EmbeddedFont,Aptos_MSFontService,Calibri,Helvetica,sans-serif; font-size:12pt;
        color:rgb(0,0,0)">総務伝達係のDe'modori Gatsuoです。</div>
    <div class="elementToProof"
        style="font-family:Aptos,Aptos_EmbeddedFont,Aptos_MSFontService,Calibri,Helvetica,sans-serif; font-size:12pt;
        color:rgb(0,0,0)"><br></div>
    <div class="elementToProof"
        style="font-family:Aptos,Aptos_EmbeddedFont,Aptos_MSFontService,Calibri,Helvetica,sans-serif; font-size:12pt;
        color:rgb(0,0,0)">この度、FY20241Q総決算会議の連絡です。</div>
    <div class="elementToProof"
        style="font-family:Aptos,Aptos_EmbeddedFont,Aptos_MSFontService,Calibri,Helvetica,sans-serif; font-size:12pt;
        color:rgb(237,92,87)"><b><u>最後まで目を通してください。</u></b></div>
    <div style="font-family:Aptos,Aptos_EmbeddedFont,Aptos_MSFontService,Calibri,Helvetica,sans-serif; font-size:12pt;
        color:rgb(0,0,0)"><br></div>
    <table id="table_0"
        data-editing-info="{&quot;topBorderColor&quot;:&quot;#ABABAB&quot;,&quot;bottomBorderColor&quot;:&quot;#ABABAB&quot;,&quot;verticalBorderColor&quot;:&quot;#ABABAB&quot;,&quot;hasHeaderRow&quot;:false,&quot;hasFirstColumn&quot;:false,&quot;hasBandedRows&quot;:false,&quot;hasBandedColumns&quot;:false,&quot;bgColorEven&quot;:null,&quot;bgColorOdd&quot;:&quot;#ABABAB20&quot;,&quot;headerRowColor&quot;:&quot;#ABABAB&quot;,&quot;tableBorderFormat&quot;:0,&quot;verticalAlign&quot;:&quot;top&quot;}"
        style="box-sizing:border-box; border-collapse:collapse; border-spacing:0px">
        <tbody>
            <tr>
                <td class="elementToProof" style="width:120px; height:27px; border-width:1px; border-style:solid;
                    border-color:rgb(171,171,171); vertical-align:top; box-sizing:border-box">
                    <div style="text-align:center;
                        font-family:Aptos,Aptos_EmbeddedFont,Aptos_MSFontService,Calibri,Helvetica,sans-serif;
                        font-size:12pt; color:rgb(0,0,0)">日付</div>
                </td>
                <td class="elementToProof" style="width:120px; height:27px; border-width:1px; border-style:solid;
                    border-color:rgb(171,171,171); vertical-align:top; box-sizing:border-box">
                    <div style="text-align:center;
                        font-family:Aptos,Aptos_EmbeddedFont,Aptos_MSFontService,Calibri,Helvetica,sans-serif;
                        font-size:12pt; color:rgb(0,0,0)">Date</div>
                </td>
            </tr>
            <tr>
                <td style="width:120px; height:27px; border-width:1px; border-style:solid;
                    border-color:rgb(171,171,171); vertical-align:top; box-sizing:border-box">
                    <div class="elementToProof" style="text-align:center;
                        font-family:Aptos,Aptos_EmbeddedFont,Aptos_MSFontService,Calibri,Helvetica,sans-serif;
                        font-size:12pt; color:rgb(0,0,0)">時間</div>
                </td>
                <td style="width:120px; height:27px; border-width:1px; border-style:solid;
                    border-color:rgb(171,171,171); vertical-align:top; box-sizing:border-box">
                    <div class="elementToProof" style="text-align:center;
                        font-family:Aptos,Aptos_EmbeddedFont,Aptos_MSFontService,Calibri,Helvetica,sans-serif;
                        font-size:12pt; color:rgb(0,0,0)">DateTime</div>
                </td>
            </tr>
            <tr>
                <td style="width:120px; height:27px; border-width:1px; border-style:solid;
                    border-color:rgb(171,171,171); vertical-align:top; box-sizing:border-box">
                    <div class="elementToProof" style="text-align:center;
                        font-family:Aptos,Aptos_EmbeddedFont,Aptos_MSFontService,Calibri,Helvetica,sans-serif;
                        font-size:12pt; color:rgb(0,0,0)">場所</div>
                </td>
                <td style="width:120px; height:27px; border-width:1px; border-style:solid;
                    border-color:rgb(171,171,171); vertical-align:top; box-sizing:border-box">
                    <div class="elementToProof" style="text-align:center;
                        font-family:Aptos,Aptos_EmbeddedFont,Aptos_MSFontService,Calibri,Helvetica,sans-serif;
                        font-size:12pt; color:rgb(0,0,0)">Place</div>
                </td>
            </tr>
        </tbody>
    </table>
    <div style="font-family:Aptos,Aptos_EmbeddedFont,Aptos_MSFontService,Calibri,Helvetica,sans-serif; font-size:12pt;
        color:rgb(0,0,0)"><br></div>
    <div style="font-family:Aptos,Aptos_EmbeddedFont,Aptos_MSFontService,Calibri,Helvetica,sans-serif; font-size:12pt;
        color:rgb(0,0,0)"><br></div>
    <div style="font-family:Aptos,Aptos_EmbeddedFont,Aptos_MSFontService,Calibri,Helvetica,sans-serif; font-size:12pt;
        color:rgb(0,0,0)">会議の出席確認と円滑な進行のため、以下のアンケートフォームにご回答いただきたくお願い申し上げます。</div>
    <div class="elementToProof"
        style="font-family:Aptos,Aptos_EmbeddedFont,Aptos_MSFontService,Calibri,Helvetica,sans-serif; font-size:12pt;
        color:rgb(237,92,87)"><span style="background-color:rgb(255,255,0)">アンケートの回答締め切りは {Deadline}&nbsp;です。</span>
    </div>
    <div style="font-family:Aptos,Aptos_EmbeddedFont,Aptos_MSFontService,Calibri,Helvetica,sans-serif; font-size:12pt;
        color:rgb(0,0,0)"><br></div>
    <div class="elementToProof"
        style="font-family:Aptos,Aptos_EmbeddedFont,Aptos_MSFontService,Calibri,Helvetica,sans-serif; font-size:12pt;
        color:rgb(0,0,0)">アンケートフォーム:&nbsp;</div>
    <div class="elementToProof"
        style="font-family:Aptos,Aptos_EmbeddedFont,Aptos_MSFontService,Calibri,Helvetica,sans-serif; font-size:12pt;
        color:rgb(0,0,0)"><a href="https://qiita.com/DEmodoriGatsuO" id="OWAc6f24db6-bf66-043e-ddf9-b8818fb66265"
            class="OWAAutoLink">DEmodoriGatsuO - Qiita</a></div>
    <div style="font-family:Aptos,Aptos_EmbeddedFont,Aptos_MSFontService,Calibri,Helvetica,sans-serif; font-size:12pt;
        color:rgb(0,0,0)"><br></div>
    <div class="elementToProof"
        style="font-family:Aptos,Aptos_EmbeddedFont,Aptos_MSFontService,Calibri,Helvetica,sans-serif; font-size:12pt;
        color:rgb(0,0,0)">お忙しいところ恐縮ですが、皆様のご協力をお願いいたします。</div>
    <div style="font-family:Aptos,Aptos_EmbeddedFont,Aptos_MSFontService,Calibri,Helvetica,sans-serif; font-size:12pt;
        color:rgb(0,0,0)"><br></div>
    <div style="font-family:Aptos,Aptos_EmbeddedFont,Aptos_MSFontService,Calibri,Helvetica,sans-serif; font-size:12pt;
        color:rgb(0,0,0)">何かご不明点やご質問がございましたら、お気軽にご連絡ください。</div>
    <div style="font-family:Aptos,Aptos_EmbeddedFont,Aptos_MSFontService,Calibri,Helvetica,sans-serif; font-size:12pt;
        color:rgb(0,0,0)"><br></div>
    <div style="font-family:Aptos,Aptos_EmbeddedFont,Aptos_MSFontService,Calibri,Helvetica,sans-serif; font-size:12pt;
        color:rgb(0,0,0)">皆様のご参加を心よりお待ちしております。</div>
    <div style="font-family:Aptos,Aptos_EmbeddedFont,Aptos_MSFontService,Calibri,Helvetica,sans-serif; font-size:12pt;
        color:rgb(0,0,0)"><br></div>
    <div style="font-family:Aptos,Aptos_EmbeddedFont,Aptos_MSFontService,Calibri,Helvetica,sans-serif; font-size:12pt;
        color:rgb(0,0,0)">FY20241Q総決算会議</div>
    <div style="font-family:Aptos,Aptos_EmbeddedFont,Aptos_MSFontService,Calibri,Helvetica,sans-serif; font-size:12pt;
        color:rgb(0,0,0)">De'modori Gatsuo</div>
</body>
```

</details>


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2734332/fae92cc6-0393-5fcb-eab8-65b13d42b3e4.png)

タイトルと本文のうち下記の名前の`文字列`を置き換えます。
`置き換える文字列`と`対応するExcel`は下記の表に基づきます。

| 置き換え文字列 | 対応するExcelの列 |
|---|---|
| {Date} | Date列(A列) `yyyy/mm/dd` |
| {name} | メール配信先の名前(B列) |
| {DateTime} | DateTime列(C列) |
| {Place} | Place列(D列) |
| {Deadline} | Deadline列(E列) |

`メール配信先`は`F列`です。

:::note warn
- まったくメール文面と関係がない置き換えですが、差し込み方の手法ということでご認識ください
- Excelの置き場所
- *Excel*は*SharePoint*上に*MailExcel*という名前で、テーブル名は*MailTable*としています
    - *SharePoint*や*OneDrive*に*Excel*がある想定で記載しています
    - いわゆるローカルファイルには適用していません
:::

## メールのひながたの準備
メールのひながたを作成します。
進め方は簡単です。下書きを用意して、共有メールボックスのフォルダにドラッグアンドドロップします。

今回の場合、共有メールボックスは`共有アイテム` > `PublicTeam`に位置します。
こちらに`ひながた`という名前のフォルダを作り、メールを格納しています。

これで下準備は整いました。

# Power Automate
`トリガー`は、`インスタント クラウドフロー`の`フローを手動でトリガーする`を選択します。
コチラは`ボタンをクリックしたとき`に走るフローです。

`Power Automate`上では赤枠の`実行`をクリックするとフローが走ります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2734332/0a0354bc-0977-4e98-e77e-ef7a231541f1.png)


さて、肝心な内容を解説します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2734332/0aba5766-1f4a-3352-0853-13f9be497473.png)

## フローの内容

1. フローを手動でトリガーする - 指定するパラメーターはありません
1. メールを取得する (V3) *Office 365 Outlook*
1. JSON の解析 *Data Operation* - 画像では`該当するメールを取得する`と記載
1. 表内に存在する行を一覧表示 *Excel Online (Business)*
1. *For each* - 繰り返す処理、使用する環境によって*Apply to each*や`それぞれに適用する`など表示名が変わります
    1. メールの送信 (V2) *Office 365 Outlook*

:::note info
幅広い方に向けて発信させていただくため、可能な限り私なりに咀嚼して細かく内容をスクリーンショットとともに記載します。
:::

### 1. フローを手動でトリガーする
特に記載事項はありません。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2734332/1214be36-9a23-e5b6-dc74-282a85bb1cb7.png)

### 2. メールを取得する (V3) *Office 365 Outlook*
- `アクションの追加`もとい`+`をクリックし、`ランタイム`を`標準`にします
- 赤枠`rgba(255,0,0,1)`の*Office 365 Outlook*を選択してください

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2734332/ea876879-aa54-db60-c81f-6bad499929fe.png)

クリックした後`メールを取得する (V3)`を選択してください。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2734332/50f317bb-8b0c-f08a-6f65-2bc2ac13f94e.png)

下記がメールを取得するうえでの**設定画面**です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2734332/bc5ec6b1-00f8-66a1-c74a-50eac62a7267.png)

複数抑えなければならない点があります。
ステップバイステップで見ていきましょう。

まず初めに、`元のメールボックスのアドレス`に`共有メールボックスのアドレス`を設定することからスタートしてください。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2734332/15223422-3877-fb21-8b83-7bbce5ac8ce3.png)

上記の設定に応じて、後述する`フォルダー`の設定が変わります

1. **件名フィルター**
    - `共有メールボックス`の特定の`フォルダ`のなかで合致するメールの下書きのタイトルを書きます
    - 同名のタイトルのメールファイルは避けておきましょう
1. **フォルダー**
    - 共有メールボックスの中の`フォルダー`を指定します
    - 赤枠の`フォルダー`📂マークをクリックすると、共有メールボックスの`フォルダー`が表示されます
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2734332/bb203a42-824c-a4e9-febc-6e2719222829.png)
        - こちらで`ひながた`が格納された`フォルダー`を設定します
        ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2734332/34045a49-e50e-6f90-0fa2-79d5dcffcfba.png)
        - この時点で`共有メールボックス`のフォルダーが表示されない場合は前述の設定を見直してください
1. **未読メッセージのみを取得する**
    - **いいえ** に設定します
    - 既定では、**はい**になってしまい、既読のメールが取得できない状態になっているので、必ず**いいえ**に指定してください
1. 元のメールボックスのアドレス
    - 共有メールボックスのアドレスを指定します
    - 前述の工程で完了しているものです
1. 添付ファイルを含める（オプション）
    - こちらを`はい`に指定しておくことで、ひながたのメールに付帯した`添付ファイル`もまとめて配信できます

### 3. JSON の解析 *Data Operation* - 画像では`該当するメールを取得する`と記載
- `アクションの追加`もとい`+`をクリックし、`ランタイム`を`組み込み`にします
- 赤枠`rgba(255,0,0,1)`の*Data Operation*または`データ操作`を選択してください
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2734332/dd745436-433b-aa0b-5bbb-08027888c15c.png)
- この中から`JSON の解析`を選択します
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2734332/9c66b14f-89aa-4b5d-d407-838653c7e666.png)

慣れている方にとっては不要な動作です。
また**慣れていない方にとっては、もっとも首をかしげてしまう部分かもしれませんが、がんばってみていきましょう。**

「2. メールを取得する (V3) *Office 365 Outlook*」で取得されるメールですが`配列(Array)`というデータ型で取得されます。
メールの件数が、0件でも1件でも100件でも同様のデータの形で返されるイメージです。

配列は複数のデータを、まとめて格納したデータの形の一種になります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2734332/6d541ebb-8c08-163c-f43e-381a0e9ef274.png)
> イメージ図

今回はメールファイルを複数取得しないよう`メールのタイトル`を重複させない対策をとっていますが、この工程で取得される値は必ず`value`という`複数形`になるため、**明示的に配列のなかの何番目のデータ**ということを表現する必要があります。

`JSON の解析`の`Content`で`fx`のマークをクリックし、

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2734332/09467e2f-6ef1-7b6f-8ff5-6b63dd16d4cb.png)

```plaintext
first(outputs('メールを取得する_(V3)')?['body/value'])
```

と設定します。

:::note info
firstとタイプすると、候補が出てきます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2734332/bf2e5fc7-a03f-0d6f-e3f2-545811bfaf38.png)

()で囲み、`動的なコンテンツ`から`body/value`を選ぶことが手っ取り早いです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2734332/0589d3bb-3e54-e2ec-72e8-58e3a176f569.png)
:::

ここで`Schema`という部分があります。
これは、後ほどの工程で今回取得したデータの内容を参照するために設定しておくと便利な項目です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2734332/0514e2e2-673c-ad64-3a2b-3be53be9f2e8.png)

`サンプルのペイロード`から基本的には取得しますが、このアクションでは不変の内容であるため、今回私が取得した下記の値をそのままコピペしてください。

```json:Schema
{
    "type": "object",
    "properties": {
        "id": {
            "type": "string"
        },
        "receivedDateTime": {
            "type": "string"
        },
        "hasAttachments": {
            "type": "boolean"
        },
        "internetMessageId": {
            "type": "string"
        },
        "subject": {
            "type": "string"
        },
        "bodyPreview": {
            "type": "string"
        },
        "importance": {
            "type": "string"
        },
        "conversationId": {
            "type": "string"
        },
        "isRead": {
            "type": "boolean"
        },
        "isHtml": {
            "type": "boolean"
        },
        "body": {
            "type": "string"
        },
        "attachments": {
            "type": "array"
        }
    }
}
```

### 3. 表内に存在する行を一覧表示 *Excel Online (Business)*
- `アクションの追加`もとい`+`をクリックし、`ランタイム`を`標準`にします
- 赤枠`rgba(255,0,0,1)`の*Excel Online(Business)*を選択してください

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2734332/a3289c84-7b31-51ea-a2e2-001ce80111f4.png)

この中で`表内に存在する行を一覧表示`を選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2734332/b410cee9-25b2-8d8f-12df-8582e62ae024.png)

こちらは`シェブロン`や項目をそれぞれクリックすると、選択式で対象が選べるためわかりやすいと思います。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2734332/5bddf71d-b878-20e1-14bf-eef1d63de716.png)

*Excel*の注意点ですが、表内に日付のデータがある場合、`詳細パラメーター`の設定が必要です。
`DateTime 形式`を*ISO 8601*に設定してください。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2734332/7d4878cb-b95f-8fb5-c991-e5ec2958504d.png)

### 4および5. 繰り返し処理 メールの送信 (V2) *Office 365 Outlook*
いよいよ`メールの送信`です。

- `アクションの追加`もとい`+`をクリックし、`ランタイム`を`標準`にします
- 赤枠`rgba(255,0,0,1)`の*Office 365 Outlook*を選択してください

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2734332/ea876879-aa54-db60-c81f-6bad499929fe.png)

`メールの送信 (V2)`を選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2734332/f75af95e-3477-f435-7db6-3027870d0e3a.png)

- `宛先`は*Excel*で読み込んだ値を選択します。宛先をクリックし、`カスタム値の入力`を選択します
    - ⚡のマークをクリック
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2734332/b2b1aef4-3bb4-f499-c3e1-c94b2415b64f.png)
    - `表内に存在する行を一覧表示`から、該当する*Excel*の列名を選択します
        - 今回は`MailAddress`が該当します
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2734332/83285c4e-b059-0c6d-642b-81bcd9b6ab59.png)

選択したあと、自動的に*For each*で囲まれます

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2734332/76909044-7464-df37-adad-35e4a41212b0.png)

**データ型が複数であると、自動的に繰り返し処理の対象と判断し、フローが構成されます。**
このまま設定を進めていきましょう。

件名は、計算式で文字を置き換える必要があります。
そのため[replace 関数](https://learn.microsoft.com/ja-jp/power-platform/power-fx/reference/function-replace-substitute)を使います。

https://learn.microsoft.com/ja-jp/power-platform/power-fx/reference/function-replace-substitute

1. `件名`を選択、`fx`のマークをクリックします
1. 置き換え式を設定します

```plaintext:件名
replace(body('該当するメールを取得する')?['subject'], '{Date}', formatDateTime(item()?['Date'],'yyyy/MM/dd'))
```

ざっくり表現すると

*replace*(`置き換える文字が含まれる文字列全体`,`置き換えたい文字`,`置き換えた後の文字`)

といった具合です。*Excel*とほとんど一緒ですが、字面がきついですね。
また日付型のデータは、うまい具合に`2024/06/24`といった`yyyy/MM/dd`の形では出てきてくれません。

UNIXタイムスタンプという、う""っとなるような文字で表現されるため、ここで加工をする必要があります。

さて、次は`本文`です。
置き換えのため、ここも`計算式`が必要になります。

1. `本文`を選択、`fx`のマークをクリックします
1. 置き換え式を設

```plaintext:計算式
replace(replace(replace(replace(replace(body('該当するメールを取得する')?['body'],'{Date}', formatDateTime(item()?['Date'],'yyyy/MM/dd')),'{name}',item()?['Name']),'{DateTime}',item()?['DateTime']),'{Place}',item()?['Place']),'{Deadline}',formatDateTime(item()?['Deadline'],'yyyy/MM/dd'))
```

見た目が非常に悪い関数ですね。*Excel*でいう`If文`が多く入った状態に近しいです。
**置き換える文字**の数だけ*replace*をかけています。

階段式に表現してみましょう

```plaintext:階段式に表現
replace(

    // 4. (3)で置き換えた結果をもとに{Deadline}という文字をExcelのDeadline列の値に置き換え
    replace(

        // 3. (2)で置き換えた結果をもとに{Place}という文字をExcelのPlace列の値に置き換え
        replace(

            // 2. (1)で置き換えた結果をもとに{DateTime}という文字をExcelのDateTime列の値に置き換え
            replace(
                // 1. {Date}という文字をExcelのDate列の値に置き換え
                replace(body('該当するメールを取得する')?['body'],'{Date}', formatDateTime(item()?['Date'],'yyyy/MM/dd')),
                '{name}',item()?['Name']
            ),
            
            '{DateTime}',item()?['DateTime']
            
        ),'{Place}',item()?['Place']),
        
    '{Deadline}',formatDateTime(item()?['Deadline'],'yyyy/MM/dd')
)
```

`()`の場所で対になっていますね。
それでも難読。変数を用いることで、より簡素になりますが、実質やっていることは`置き換え`を繰り返している、といったイメージです。

ひながたの置き換えではなく、`メールの送信`指定した文字の箇所に値を置く形式のほうが、慣れないうちは楽です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2734332/2e2710f8-ae35-89e6-a837-ee816392ad53.png)

しかし今回は雛形を置き換える形式なので、計算式を用いています。

詳細パラメーターは下記を設定します。
- 差出人
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2734332/5bf9791f-14fb-0e8a-8055-2e69538d9b45.png)
    - 共有メールボックスを送信元に指定できます
- 添付ファイル
    1. `アレイ全体の入力に切り替える`をクリックします
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2734332/a142ea07-3c51-4db9-55a0-630fbb9e341a.png)
    1. こちらに計算式の指定が必要になります`first(outputs('メールを取得する_(V3)')?['body/value'])?['attachments']`
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2734332/85a8e3e9-48b4-88b6-ad55-2b162a3b8164.png)
        - `メールを取得する (V3)`から添付ファイルを参照するためです
        - これにより添付ファイルの数がいくつでもまとめて添付することができます
- 返信先
    - お好みで返信先を`共有メールボックス`に指定してください

**こちらで完成🙌お疲れ様でした！**

実行すると**差し込みで一括配信が実現できます！**

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2734332/b81a050e-3b12-0dd2-4ace-ae9f3e8fb06a.png)

`共有メールボックス`に雛形があるため、関係者にフローを複製し、接続を変えていただくだけで使いまわせることもポイントですね。

`コピーの送信`で選択した方にフローを複製できます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2734332/78fe06b4-4d3b-8ea0-5e10-b8621d9c7567.png)


また管理者が`実行のみユーザー`に使う人を指定することでも使っていただくことができるため、オプションは複数存在します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2734332/520fa48c-f71e-d2ff-4b29-94fb914febcf.png)

上記から`実行専用ユーザー`を設定することでも使用可能

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2734332/b583e222-668b-d514-4d0c-477e59a3a7cb.png)

# おわりに
今回はチームメンバーにもフローを共有する前提のシナリオを書いてみました！
クラウドフローでも`値の差し込み`は可能です。

**豊富なコネクタから値を取得できることも魅力！**
`計算式`や`配列`など出てきましたが、慣れればどうってことないです！

**是非トライしてみてください！**