Microsoft Flowでメール自動配信をする

## MicrosoftFlowとは
office365に含まれるサービスで簡単にサービス間連携を行えるというものです。似た製品でIFTTTがあげられます。
「メールの添付ファイルをonedriveに保存する」「plannerにタスクが登録されたらslackに通知」等、テンプレートから様々なサービスを簡単に作成することができます。

## 今回作成したもの
「案内メール自動送信」

- 顧客リストからメール配信可否を判断しメールを送信
- メール送信開始、完了をMicrosoft teamsに通知
- メール送信結果をexcelに記録

やってることはwordの差し込みを利用したメール送信とあまり変わりませんが、
Flowで作成すると、他サービスと連携が可能なため、色々できます。

## 全体構成図
Flowでは以下のような流れで作成しています。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/195221/364a349c-584c-016a-37da-709076d89a94.png)

顧客リストのExcelをSharePointに格納しています。
※Excelからデータを取得する場合は、テーブルに保存しないとデータを取れません。

データソースはSharePointのリストで代替できます。


## 処理説明
### 処理開始
今回は、実行者がメールを流すタイミングで実行するため手動のトリガーです。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/195221/a8fd3d57-3389-4245-4dc4-303e6d929f15.png)

### 顧客情報抽出
下記画像ではExcelの「List rows present in table」アクションを使用していますが、
現時点では日本語に表記が変わっていました。→「複数行を取得」

![image.png](https://qiita-image-store.s3.amazonaws.com/0/195221/27c92194-1a24-7dbb-1dcb-b8114c386b62.png)


サイトのアドレスと、ファイルのパス、テーブル名を設定すると１レコードづつ情報を取得できます。
※デフォルトでは100件までしか取得できないため、設定「・・・」から上限を設定します。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/195221/b9c6bed5-4e77-7f2f-c3a3-c1599d1682b0.png)


### 変数準備
変数の初期化を行います。この作業はなくても良いのですが、このFlowで使う値を最初に定義しておくとわかりやすいです。
ここでは、メールを送る際に必要な情報と配信結果を記録するために必要な情報を定義しています。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/195221/28790399-bb84-593b-fd33-50c1f047c463.png)

変数アクションにも種類があります。
基本的に「変数の初期化」で変数を定義して、「変数の設定」で値を代入します。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/195221/3e8e9091-89cd-1c36-973a-be91ca4ac3d4.png)


### teamsに通知（開始）
teamsに開始を通知します。
チームIDはサインインしているアカウントのチームが自動で表示されるのでその中から選択します。
※現時点では、メンション等はつけれず文字列のみになります。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/195221/cdad8079-4870-8b77-366e-ff5f7aa472d9.png)

### 繰り返し
繰り返しは「applay to each」を使用します。
上記で取得したテーブルのレコードを一件づつレコード件数分繰り返し処理をします。
まずは、変数に1レコード分の値を代入します。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/195221/116a6c5a-8efa-d75e-ac13-fc72b7a21bcd.png)

#### 配信可否判定
条件コネクタを使用してメールを配信可否を設定します。
画面から想像はつきますが、条件に一致すれば、「はい」　条件に一致しなければ「いいえ」に処理が流れます。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/195221/e58e585a-df3c-3dd0-371b-52c75ffb59d7.png)

#### 会社名、メールアドレスNULL判定
会社名、メールアドレスのNULL判定をしています。
後のメールコネクタでメールアドレスが空の場合、Flowが失敗するため、条件を設定しています。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/195221/205d1ac8-b634-630d-6039-a94bc930d9f1.png)

ifのAND条件を使用するには、詳細モードから式を直接入力します。

```
@and(equals(empty(variables('会社名')), false),equals(empty(variables('メールアドレス')), false))
```

上記式は、```empty()```の結果が会社名、メールアドレスともにfalseという条件で判定をしています。

### メール送信
メール送信コネクタでメールを送信します。
動的コンテンツからメールアドレスを使用します。リストから取得したメールアドレスです。先ほど代入した値を使って件名、本文を作成してきます。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/195221/ed482fa3-46e0-2b95-eb85-2732e16e14a0.png)


#### 並列処理
＋ボタンから並列分岐処理を追加できます。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/195221/1f26ce93-35e7-e9c8-1ce7-6c21a99b475e.png)

今回は直前のメール送信のコネクタの処理が失敗した場合と成功した場合の処理で分岐させています。（赤線が失敗した場合）

こちらは実行条件の構成から設定します。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/195221/7d7c9b90-3555-3828-85b4-3fb14937d56d.png)

実行条件の構成をクリックすると、直前の処理結果によって実行するかどうかを設定することができます。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/195221/7834617b-8647-84cd-7e2f-693642ce6d53.png)


### 配信結果記録
今回は送信記録サマリーをエクセルのテーブルに記録します。

送信記録サマリーは先ほどの繰り返しが終了した後に記録します。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/195221/b502081c-ba78-b9c5-b4dd-46e5cc220759.png)

ここでも並列処理分岐を設定しています。
直前の繰り返し処理が成功した場合と失敗した場合です。
成功した場合は、teamsに成功通知、失敗した場合はteamsに失敗通知をします。

また、Excelに記録する際に待ち時間を設定します。
これは前の繰り返し処理のエクセルファイルの更新が完了するのを待つ処理になります。

Excelファイルのコネクタは非同期処理なため、繰り返し処理が抜けた後でもエクセルを掴んだままで、新たにエクセル編集しようとするとロックがかかってしまい上手く更新できません。

そのため、待ち時間をを設定しています。ここでは適当に10秒としています。

本題のExcelファイルのコネクタですが、テーブルを指定してあげると自動的に
テーブルのカラムが表示されるので、そこに代入する値を設定するだけでOKです。


### teamsに通知（終了）
成功の場合の設定です。隠している部分はサマリー記録のエクセルのリンクを記載しています。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/195221/80de66e3-2247-4d50-3b11-a805bdcada97.png)


## 最後に
今回作成したFlowではoffice365製品のみとの連携ですが、コネクタには3rdパーティ製品も多く含まれているため、他システムとの連携も可能です。
アイデア次第で簡単に面白いサービスを作ることができるので、興味もたれた方は[こちら](https://japan.flow.microsoft.com/ja-jp/)から無料で利用できますので是非！


最後まで読んでいただきありがとうございました。