【Microsoft Flow】Office 365 へ自動返信されるメールの疎通監視をフローで行う

# はじめに

Office 365（Exchange Online）から送信されたメールに対して自動的にメール返信が行われるシステム（以降、自動返信システム）があるとする。例えば、

- メール誤送信対策システム（保留通知メール、パスワード通知メール）
- ヘルプデスクシステム（問い合わせ受付けメール）
- その他業務システム

など。これらの構成においては、自動返信システム側でのメールキュー滞留や、Office 365 側で IPスロットリング[<sup>↗</sup>](https://blogs.technet.microsoft.com/exchangeteamjp/2015/03/23/ip/)が発動した際のメール配送障害に備えて、自動返信システムから Office 365 へのメール疎通を監視したい場合がある。

そこで今回は、Microsoft Flow を利用して Office 365 へ自動返信されるメールの疎通監視を１時間に一回行い、配送遅延を検知した際に担当者に自動でアラート通知を行うフローを作成する手順を紹介する。

# 前提

- Office 365（Outlook、Microsoft Flow）
- メール疎通を監視したい Office 365 テナントのアカウントでフローを作成できること。
- 送信メールへ自動返信されるメールの件名が定型であること。（例 `[XXXシステム]Held : "＜送信メール件名＞"`など）

# 手順

##### 1. フローを新規作成

1. Microsoft Flow を起動してマイ フロー画面を表示
2. [新規]-[一から作成]メニューをクリック

##### 2. スケジュールのトリガーの作成

本フローを１時間に一回のスケジュールで実行するトリガーを作成する。

1. トリガー一覧より、[スケジュール]を選択
2. [新しいパラメータの追加]をクリックして[タイムゾーン]と[開始時刻]にチェックを入れ、アクションの欄外をクリックしてパラメータを追加

![image.png](https://qiita-image-store.s3.amazonaws.com/0/258416/4fa4e41a-f4d6-39e2-2b28-310350108d5d.png)

3.プロパティを以下のように設定

|プロパティ名|値|説明|
|---|---|---|
|間隔|実行間隔時間|
|頻度|任意の時間単位|
|タイム ゾーン|任意のタイムゾーン|
|開始時刻|定期実行を開始したい`yyyy-MM-ddTHH:mm:ss`形式の任意の時刻|※時刻末尾に「Z」は不要|

下記の設定の場合は 日本時間の2019/4/3 18:00 から１時間に一回フローが実行される。

![スクリーンショット 2019-04-03 17.21.13.png](https://qiita-image-store.s3.amazonaws.com/0/258416/4f210f76-e94f-9707-1fb7-323fcbd0c7d3.png)

##### 3. 作成アクションの作成

フローから自動返信システムへ送信する疎通確認用メールの件名`<JST現在日時>:XXシステム自動返信メール監視`を定義する。

1. [新しいステップ]をクリック
2. アクション一覧より、[作成]を選択
3. [入力]プロパティに`@{addHours(utcNow(),9)}:XXシステム自動返信メール監視`と設定

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/258416/4f12aae7-37ac-aa9b-2d4e-e491e476dafc.png)

##### 4. メールの送信 (V2)アクションの作成

自動返信システムへ疎通確認用メールを送信するアクションを作成する。

1. [新しいステップ]をクリック
2. アクション一覧より、[メールの送信 (V2)]を選択
3. プロパティを以下のように設定

|プロパティ名|値|
|---|---|
|宛先|送信するとシステムが自動返信を行う宛先|
|件名|`@{outputs('作成')}`|
|本文|任意の本文|

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/258416/b3f7d324-164f-0e17-f1cc-01821cec59a6.png)

##### 5. 待ち時間アクションの作成

前アクションでフローがメールを送信してから、システムからの自動返信メールを Office 365 のメールボックスが受信するまでの許容遅延時間を指定する。
指定した時間間隔以上の配送遅延が発生した場合に、後段のアクションにより担当者へアラート通知が行われる。

1. [新しいステップ]をクリック
2. アクション一覧より、[待ち時間]を選択
3. [カウント]と[単位]を指定して任意の時間間隔を指定

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/258416/7d0b9573-601e-b839-b554-14a67929cf14.png)

##### 6. メールの取得 (V2)アクションの作成

フローが送信した疎通確認用メールに対する自動返信メールをメールボックスから取得するアクションを作成する。

1. [新しいステップ]をクリック
2. アクション一覧より、[メールの取得 (V2)]を選択
3. [詳細オプションを表示する]をクリック
4. プロパティを以下のように設定

|プロパティ名|値|説明|
|---|---|---|
|上|`1`|検索フィルターに該当するメールを最新順に1通取得する。|
|件名フィルター|`[XXXシステム]Held : "@{outputs('作成')}"`|自動返信メールの件名が定型文`[XXXシステム]Held : "＜送信メール件名＞"`である場合を想定|

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/258416/8480ba25-81bf-fe67-b0dd-3b6b12d8349d.png)

##### 7. 条件アクションの作成

前アクションで条件に一致するメールが取得できた場合にのみ担当者へ通知を行うように条件を作成する。

1. [新しいステップ]をクリック
2. アクション一覧より、[条件]を選択
3. 左辺の[値の選択]を選択して[式]に`length(body('メールの取得_(V2)')?['value'])`を設定し、[OK]をクリック

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/258416/d6269a92-d3ad-c4de-5828-9428fbba7b77.png)

4.オペレーターおよび右辺を以下のように設定

|プロパティ名|値|
|---|---|
|オペレーター|`次の値に等しい`|
|右辺|`1`|

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/258416/f943d82d-8b59-9b23-bce7-8f3dc96a5821.png)

##### 8. 担当者への通知の構成

担当者への通知方法を検討する。
例えば Office 365 から外部のアドレスへメールを送信する際に必ず経由する自動返信システム（誤送信対策システムなど）で障害が発生した場合、障害を通知するメールも同様に外部へ送信ができない可能性がある。

そこで以下では、フローを作成したアカウントとは別の Office 365 テナントのアカウントから通知メールを送信する方法を記載する。

1. 条件アクションの「いいえ」内の[アクションの追加]をクリック
2. アクション一覧より、[メールの送信 (V2)]を選択
3. アクション名右の[…]をクリックし、[+新しい接続の追加]をクリック

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/258416/7300a9f0-9a0f-7342-427e-21536fa87db7.png)

4.ブラウザの別タブで Office 365 の認証画面が開く。別の Office 365 テナントのアカウントで認証を行う。
5.フロー編集画面に戻り、再度アクション名右の[…]をクリックすると、[マイ コネクション]に先程認証したアカウントが追加されているので、選択する。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/258416/abcd2ff4-cf24-21df-41d9-479ca6df6d27.png)

6.アクションのプロパティを以下のように設定

|プロパティ名|値|説明|
|---|---|---|
|宛先|通知メール送信先アドレス||
|件名|`[障害] JST @{addHours(utcNow(), 9, 'yyyy/MM/dd HH:mm')} XXシステム メール遅延検知`|任意の件名|
|本文|`Office 365 から XXシステムへのメール配送にYY分以上の遅延を検知しました。`|任意の本文|

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/258416/38cbe824-55e8-3b74-3d06-03861bf9941a.png)

これで、別のテナントのアカウントから通知メールが送信できるようになった。もちろん、既定の設定のままとすれば、フローを作成したアカウント自身から通知メールを送信させることも可能である。

また、Office 365 からのメール送信以外にも slack へのメッセージ投稿や Gmail からのメール送信など様々なアクションが標準で用意されているので、必要に応じた通知方法を採用すると良い。（その場合は slack や Gmail のアカウントは別途必要）

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/258416/89668feb-237b-71f7-b868-fe0eda3aab00.png)

##### 9. フローの保存

任意の名前を付けてフローを保存する。

作成したフローの全体図はこちら
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/258416/3a1884bb-c764-4a14-0e0f-b6eee7a78329.png)


以上