ささみ学習帳 - sasami's study book

ささみ学習帳

Microsoft365 や Power Platform について学んだこと・アイデアのメモ

Outlook のメールに設定した分類(カテゴリ)を取得・更新する Power Automate クラウドフロー

 

 

Outlookはメールやイベントに分類(カテゴリ)を設定できる

Outlookではメッセージや予定表イベントに 分類(カテゴリ) を使用して、タグ付け、ラベル付け、グループ化を簡単に行うことができます。今回はメールのカテゴリをPower Automateから操作する方法を調べてみました。

※分類なのかカテゴリなのか日本語表記が揺らいでいるところがありますが以降カテゴリと記載します。

 

Power Automate でメールのカテゴリを設定する考え方

Office 365 Outlook コネクタのアクションを一通りチェックしましたが、カテゴリを操作するアクションは見当たりません。

また「電子メールの取得(V2)」アクションでメールの詳細を取得できますがこちらの出力にもカテゴリの情報は含まれていません。

 

ですがOffice 365 Outlook コネクタには「HTTP要求を送信します」アクションがありますので、Graph APIを呼び出すことで実現が可能でした。以下具体的な手順です。

 

1.メールに設定されたカテゴリを取得する

まず特定のメールに設定されているカテゴリを取得するフローです。

1-1.フロー全体図

1-2.フロー解説

1-2-1.手動でフローをトリガーする

サンプルフローなのでトリガーは手動実行です。入力としてメッセージを識別するメッセージIDを指定します。メッセージIDは、Office 365 Outlook コネクタのメール系トリガーやアクションから取得することが可能です。

 

1-2-2.[Office 365 Outlook] HTTP要求を送信します-メールを取得

Graph API でメールを取得します。Office 365 Outlookコネクタにも「電子メールの取得(V2)」アクションはありますが、このアクションではカテゴリは取得できません。しかし、Graph API でメールを取得することでカテゴリの情報の取得が可能です。

 

1-2-3.[データ操作]JSONの解析-メールを取得

  • コンテンツ
    • @{body('HTTP_要求を送信します-メールを取得')}
  • スキーマ
    • 下記
{
    "type": "object",
    "properties": {
        "@@odata.context": {
            "type": "string"
        },
        "@@odata.etag": {
            "type": "string"
        },
        "id": {
            "type": "string"
        },
        "createdDateTime": {
            "type": "string"
        },
        "lastModifiedDateTime": {
            "type": "string"
        },
        "changeKey": {
            "type": "string"
        },
        "categories": {
            "type": "array",
            "items": {
                "type": "string"
            }
        },
        "receivedDateTime": {
            "type": "string"
        },
        "sentDateTime": {
            "type": "string"
        },
        "hasAttachments": {
            "type": "boolean"
        },
        "internetMessageId": {
            "type": "string"
        },
        "subject": {
            "type": "string"
        },
        "bodyPreview": {
            "type": "string"
        },
        "importance": {
            "type": "string"
        },
        "parentFolderId": {
            "type": "string"
        },
        "conversationId": {
            "type": "string"
        },
        "conversationIndex": {
            "type": "string"
        },
        "isReadReceiptRequested": {
            "type": "boolean"
        },
        "isRead": {
            "type": "boolean"
        },
        "isDraft": {
            "type": "boolean"
        },
        "webLink": {
            "type": "string"
        },
        "inferenceClassification": {
            "type": "string"
        },
        "body": {
            "type": "object",
            "properties": {
                "contentType": {
                    "type": "string"
                },
                "content": {
                    "type": "string"
                }
            }
        },
        "sender": {
            "type": "object",
            "properties": {
                "emailAddress": {
                    "type": "object",
                    "properties": {
                        "name": {
                            "type": "string"
                        },
                        "address": {
                            "type": "string"
                        }
                    }
                }
            }
        },
        "from": {
            "type": "object",
            "properties": {
                "emailAddress": {
                    "type": "object",
                    "properties": {
                        "name": {
                            "type": "string"
                        },
                        "address": {
                            "type": "string"
                        }
                    }
                }
            }
        },
        "toRecipients": {
            "type": "array",
            "items": {
                "type": "object",
                "properties": {
                    "emailAddress": {
                        "type": "object",
                        "properties": {
                            "name": {
                                "type": "string"
                            },
                            "address": {
                                "type": "string"
                            }
                        }
                    }
                },
                "required": [
                    "emailAddress"
                ]
            }
        },
        "ccRecipients": {
            "type": "array"
        },
        "bccRecipients": {
            "type": "array"
        },
        "replyTo": {
            "type": "array"
        },
        "flag": {
            "type": "object",
            "properties": {
                "flagStatus": {
                    "type": "string"
                }
            }
        }
    }
}

 

1-2-4.[データ操作]作成-categories

  • 入力
    • @{body('JSON_の解析-メールを取得')?['categories']}

カテゴリはこんな感じで取得できます。

 

2.メールのカテゴリをまるっと上書きする

メールのカテゴリを指定した値で上書きするフローです。

2-1.フロー全体図

2-2.フロー解説

2-2-1.手動でフローをトリガーする

サンプルフローなのでトリガーは手動実行です。入力としてメッセージを識別するメッセージIDを指定します。メッセージIDは、Office 365 Outlook コネクタのメール系トリガーやアクションから取得することが可能です。

 

2-2-2.[Office 365 Outlook] HTTP要求を送信します

Graph API でメールを更新します。この時、アクションで指定した値でカテゴリは上書きされます。複数のカテゴリが設定されていてその内の1つを削除・追加したいといった場合はもう一工夫必要です。

 

3.メールにカテゴリを1つ追加する

メールのカテゴリに1つカテゴリを追加するフローです。

3-1.フロー全体図

 

3-2.フロー解説

3-2-1.手動でフローをトリガーする

 

サンプルフローなのでトリガーは手動実行です。入力としてメッセージを識別するメッセージIDと設定するカテゴリを指定します。メッセージIDは、Office 365 Outlook コネクタのメール系トリガーやアクションから取得することが可能です。カテゴリはあらかじめOutlookにカテゴリとして登録しておいたものを指定します。

 

3-2-2.[Office 365 Outlook] HTTP要求を送信します-メールを取得

指定したメッセージIDのメールを取得して既存のカテゴリの値を参照します。

「1-2-2.[Office 365 Outlook] HTTP要求を送信します-メールを取得」と全く同じなので省略します。

 

3-2-3.[データ操作]JSONの解析-メールを取得

「1-2-3.[データ操作]JSONの解析-メールを取得」と全く同じです。

 

3-2-3.[データ操作]作成-New categories

  • 入力
    • @{union(
          body('JSON_の解析-メールを取得')?['categories'],
          createArray(triggerBody()['text_1'])
      )}

union関数で既存のカテゴリの値と追加するカテゴリの値を1つの配列にまとめます。

 

3-2-4.[Office 365 Outlook]HTTP要求を送信します-カテゴリを更新

3.2.3.で既存のカテゴリ+新しいカテゴリの配列を作成したのでこれを使ってメールを更新します。

 

4.メールに設定されたカテゴリを1つ削除する

メールに設定されたカテゴリから指定した1つのみを削除するパターンです。

4-1.フロー全体図

 

4-2.フロー解説

4-2-1.手動でフローをトリガーする

 

サンプルフローなのでトリガーは手動実行です。入力としてメッセージを識別するメッセージIDと削除するカテゴリを指定します。メッセージIDは、Office 365 Outlook コネクタのメール系トリガーやアクションから取得することが可能です。

 

4-2-2.[Office 365 Outlook] HTTP要求を送信します-メールを取得

指定したメッセージIDのメールを取得して既存のカテゴリの値を参照します。

「1-2-2.[Office 365 Outlook] HTTP要求を送信します-メールを取得」と全く同じなので省略します。

 

4-2-3.[データ操作]JSONの解析-メールを取得

「1-2-3.[データ操作]JSONの解析-メールを取得」と全く同じです。

 

4-2-4.[データ操作]アレイのフィルター処理-指定値を除外したcategories

メールの既存のカテゴリから指定したカテゴリをフィルターで取り除きます。

 

4-2-5.[Office 365 Outlook]HTTP要求を送信します-カテゴリを更新

4.2..4で削除しないカテゴリの配列を作成したのでこれを使ってメールを更新します。

 

5.特定のカテゴリが設定されたメールを検索する

最後にカテゴリが設定されたメールを検索するパターンです。

5-1.フロー全体図

5-2.フロー解説

カテゴリが設定されたメールを検索するには2つの手段がありました。

  • 「メールを取得する(V3)」アクションを使う
  • 「HTTP要求を送信します」アクションでGraph APIを使う

それぞれの方法で"export"カテゴリが設定されたメールを検索しています。

取得できる値の違いや、「メールを取得する(V3)」アクションでは特定のフォルダ内の検索になるという違いがあります。用途によって使い分けができそうです。

5-2-1.[Office 365 Outlook]メールを取得する(V3)

  • フォルダー
    • Inbox
  • 未読メッセージのみを取得する
    • いいえ
  • 検索クエリ
    • category:@'export'

出力はこのようなJSONで返されます。

 

5-2-2.[Office 365 Outlook]HTTP要求を送信する

 

こちらはこのような出力です。

5-2-3.[データ操作]JSONの解析

  • コンテンツ
    • @{body('HTTP_要求を送信します-メッセージを取得-exportカテゴリ付き')}
  • スキーマ
    • {
          "type": "object",
          "properties": {
              "@@odata.context": {
                  "type": "string"
              },
              "value": {
                  "type": "array",
                  "items": {
                      "type": "object",
                      "properties": {
                          "@@odata.etag": {
                              "type": "string"
                          },
                          "id": {
                              "type": "string"
                          },
                          "createdDateTime": {
                              "type": "string"
                          },
                          "lastModifiedDateTime": {
                              "type": "string"
                          },
                          "changeKey": {
                              "type": "string"
                          },
                          "categories": {
                              "type": "array",
                              "items": {
                                  "type": "string"
                              }
                          },
                          "receivedDateTime": {
                              "type": "string"
                          },
                          "sentDateTime": {
                              "type": "string"
                          },
                          "hasAttachments": {
                              "type": "boolean"
                          },
                          "internetMessageId": {
                              "type": "string"
                          },
                          "subject": {
                              "type": "string"
                          },
                          "bodyPreview": {
                              "type": "string"
                          },
                          "importance": {
                              "type": "string"
                          },
                          "parentFolderId": {
                              "type": "string"
                          },
                          "conversationId": {
                              "type": "string"
                          },
                          "conversationIndex": {
                              "type": "string"
                          },
                          "isDeliveryReceiptRequested": {},
                          "isReadReceiptRequested": {
                              "type": "boolean"
                          },
                          "isRead": {
                              "type": "boolean"
                          },
                          "isDraft": {
                              "type": "boolean"
                          },
                          "webLink": {
                              "type": "string"
                          },
                          "inferenceClassification": {
                              "type": "string"
                          },
                          "body": {
                              "type": "object",
                              "properties": {
                                  "contentType": {
                                      "type": "string"
                                  },
                                  "content": {
                                      "type": "string"
                                  }
                              }
                          },
                          "sender": {
                              "type": "object",
                              "properties": {
                                  "emailAddress": {
                                      "type": "object",
                                      "properties": {
                                          "name": {
                                              "type": "string"
                                          },
                                          "address": {
                                              "type": "string"
                                          }
                                      }
                                  }
                              }
                          },
                          "from": {
                              "type": "object",
                              "properties": {
                                  "emailAddress": {
                                      "type": "object",
                                      "properties": {
                                          "name": {
                                              "type": "string"
                                          },
                                          "address": {
                                              "type": "string"
                                          }
                                      }
                                  }
                              }
                          },
                          "toRecipients": {
                              "type": "array",
                              "items": {
                                  "type": "object",
                                  "properties": {
                                      "emailAddress": {
                                          "type": "object",
                                          "properties": {
                                              "name": {
                                                  "type": "string"
                                              },
                                              "address": {
                                                  "type": "string"
                                              }
                                          }
                                      }
                                  },
                                  "required": [
                                      "emailAddress"
                                  ]
                              }
                          },
                          "ccRecipients": {
                              "type": "array"
                          },
                          "bccRecipients": {
                              "type": "array"
                          },
                          "replyTo": {
                              "type": "array"
                          },
                          "flag": {
                              "type": "object",
                              "properties": {
                                  "flagStatus": {
                                      "type": "string"
                                  }
                              }
                          }
                      },
                      "required": [
                          "@@odata.etag",
                          "id",
                          "createdDateTime",
                          "lastModifiedDateTime",
                          "changeKey",
                          "categories",
                          "receivedDateTime",
                          "sentDateTime",
                          "hasAttachments",
                          "internetMessageId",
                          "subject",
                          "bodyPreview",
                          "importance",
                          "parentFolderId",
                          "conversationId",
                          "conversationIndex",
                          "isDeliveryReceiptRequested",
                          "isReadReceiptRequested",
                          "isRead",
                          "isDraft",
                          "webLink",
                          "inferenceClassification",
                          "body",
                          "sender",
                          "from",
                          "toRecipients",
                          "ccRecipients",
                          "bccRecipients",
                          "replyTo",
                          "flag"
                      ]
                  }
              }
          }
      }

 

 

 

 

 

参考にしたサイト/ページ

learn.microsoft.com

 

learn.microsoft.com

 

learn.microsoft.com

 

powerusers.microsoft.com

 

さいごに

別のフローのアイデアの実証のために自身のメールボックスのみ確認してみました。「HTTP要求を送信します」アクションでGraph APIを使うことでOffice 365 Outlook コネクタにはない機能でも実現できる可能性があります。「HTTP要求を送信します」アクションで実現できる=Power Automate Premiumライセンス不要というのもポイントです。