Power AppsでOutlookのメール アーカイブツールを作る

# はじめに
`メールを保存する` 
証跡を残す文化には必要かもしれませんね。

`Power Automate` で[メールのエクスポート (V2)](https://learn.microsoft.com/ja-jp/connectors/office365/#%E3%83%A1%E3%83%BC%E3%83%AB%E3%81%AE%E3%82%A8%E3%82%AF%E3%82%B9%E3%83%9D%E3%83%BC%E3%83%88-(v2)) アクションが存在します。

Power Automate必須の作業に感じていましたが、`Power Apps`だけでも、メールの保存が完結できました。

https://learn.microsoft.com/ja-jp/connectors/office365/#%E3%83%A1%E3%83%BC%E3%83%AB%E3%81%AE%E3%82%A8%E3%82%AF%E3%82%B9%E3%83%9D%E3%83%BC%E3%83%88-(v2)

上記について、Qiitaに残していきたいと思います。

# 前提
`Power Automate`を使わずに、メールファイルを保存するためには
メールファイルの格納先を`SharePoint Lists`に設定する必要があります。

:::note warn
上記以外の方法が、現段階では私は見つけられていません。
ファイル コンテンツを保存できるアクションが、`Power Apps`の`Collect関数`以外、見つけられていないためです。
:::

# 実際に作ってみる
作成したアプリは下記のようなものです。

- Power Apps - Office 365 Outlookに接続して、メールを一覧化する
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2734332/e2627fb3-02ec-325f-5fc9-13d7a6ed7d36.png)

- Power Appsのアーカイブボタンを押すと添付ファイル込みで、SharePoint Listsの添付ファイルに保存される
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2734332/a7a553e6-cfa7-1b86-0eb3-337ff0613f8d.png)

:::note info
メールはChatGPTで作成した架空のものです
:::

## 作成手順

Power Appsで、下記の3つのデータに接続します。
- [Office 365 Outlook](https://learn.microsoft.com/ja-jp/connectors/office365/)
- SharePoint
- [Office 365 Users](https://learn.microsoft.com/ja-jp/connectors/office365users/)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2734332/2516bebc-c876-bc9f-d129-98b9ebb00f75.png)

レイアウトは、いつもの感じです。
1. ヘッダー
1. サイドバー
1. メインセクション

**テンプレートが非常にクオリティーが高いので、そちらを活用します。**

### ギャラリーコントロール
ギャラリーコントロールのデータソースは下記のとおりです。

```
Office365Outlook.GetEmails({fetchOnlyUnread:false})
```
|名前|パラメーター|データ型|説明
|---|---|---|---
|**未読のメッセージのみ取り込む**|**fetchOnlyUnread**|**boolean**|**未読の電子メールのみを取得**
|フォルダー|folderPath|string|電子メールを取得するメール フォルダー (既定: 「Inbox」)
|添付ファイルを含む|includeAttachments|boolean|true に設定すると、電子メールと共に添付ファイルのコンテンツも取得される
|検索クエリ|searchQuery|string|メールをフィルター処理する検索クエリ、[パラメーターの使用方法](https://docs.microsoft.com/graph/query-parameters#search-parameter)
|上詰め|top|integer|取得するメールの件数 (既定: 10, 最大: 25)
|スキップ数|skip|integer|スキップするエントリ数 (既定値 = 0)

https://learn.microsoft.com/ja-jp/power-apps/maker/canvas-apps/connections/connection-office365-outlook

ポイントは`fetchOnlyUnread:false`です。こちらを設定しないと`未読の電子メールのみを取得`となってしまい、戸惑います。

フォルダで制限するときは`folderPath`で対象を指定しましょう。

### だれのアカウントに接続するのか
Outlookをデータソースにすると、Power Appsを作成した人のメールが表示されるのでは・・・？と思いますが、Power Appsを使用しているユーザーのアカウントのデータが表示されます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2734332/1911a07c-b1c1-afcb-9f54-4e5d50553359.png)

:::note info
あくまでログインしているアカウントのメールが表示されます。
:::

自分の予想以上のアクセス権限は発生しません。

## [Office365Outlook.ExportEmailV2 - メールのエクスポート (V2)](https://learn.microsoft.com/ja-jp/connectors/office365/#%E3%83%A1%E3%83%BC%E3%83%AB%E3%81%AE%E3%82%A8%E3%82%AF%E3%82%B9%E3%83%9D%E3%83%BC%E3%83%88-(v2))

1. メールをBlobとして変数に保存する
1. SharePoint Listsに添付ファイルとしてメールファイルを保存する

https://learn.microsoft.com/ja-jp/connectors/office365/#%E3%83%A1%E3%83%BC%E3%83%AB%E3%81%AE%E3%82%A8%E3%82%AF%E3%82%B9%E3%83%9D%E3%83%BC%E3%83%88-(v2)


上記の二段階で実施します。

[SharePoint Listsに添付ファイルとしてメールファイルを保存する](https://koruneko.hatenablog.com/entry/2021/06/20/060709)にことについては、[Microsoft MVPのコルネさんのブログ](https://koruneko.hatenablog.com/entry/2021/06/20/060709)が非常に参考になります。

https://koruneko.hatenablog.com/entry/2021/06/20/060709

`Office365Outlook.ExportEmailV2` アクションの戻り値は`Blob`です。
```plaintext:コンテキスト変数にメールコンテンツを格納する
UpdateContext({data:Office365Outlook.ExportEmailV2(<メールID>)});
```

メールコンテンツを`コンテキスト変数`に格納して、SharePoint Listsに、項目を作成して、添付ファイルとして追加します。

```
// 1. コンテキスト変数にメールファイルを格納
UpdateContext({data:Office365Outlook.ExportEmailV2(galMails.Selected.Id)});

// 2. SharePoint Listsに項目を作成、添付ファイルとして追加
Collect(mailArchive,
    {
        タイトル: GUID(),
        添付ファイル: 
            Table(
                {
                    DisplayName: Text(Now(),"yyyymmddHHmmss") & ".eml",
                    Id: GUID(),
                    Value: data
                }
            )
    }
)
```

`添付ファイル:`の部分で、配列でファイルを追加します。

## 実行すると・・・

さて、実行をすると添付ファイル込みで、SharePoint Listsにメールが保存されていることがわかります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2734332/5ac59206-a29e-c440-4cca-83ca5f01bee6.png)

# おわりに
Power Appsだけでもいけるものですね。

**Microsoft MVPにちゃっかりなれました。
よかったら祝ってください。**