Microsoft 365 システム開発

【Power Automate】1000件以上のメールを取得できない?

Power Automate で Outlook のメールを取得しようとする際、真っ先に検討するのは Office 365 Outlook コネクタの “メールを取得する (V3)” アクションかと思います。
しかしながら、先日フロー開発業務の中で、このアクションでは1000件以上のメールを取得できないことに気が付きました。
そこで、今回はこの理由と回避策についてまとめてみます。

✅1000件以上のメールを取得できない理由

結論から言ってしまうと、当アクションの仕様による制限です。
実はこちら、公開情報にもこっそりと記載があります。
🔗Office 365 Outlook – Connectors | Microsoft Learn

4b3a0c657f2387909e7dfb799efad0e4

本アクションには “改ページ” の機能等はなく、アクションの出力としても取得したメールについての情報に留まり、未取得分メールについての情報は返されません。
そのため、”メールを取得する (V3)” アクションで1000件以上のメールを取得することはできないと考えています。

✅回避策

同じ Office 365 Outlook コネクタの “HTTP 要求を送信します” アクションで以下の API にリクエストすることで、1000件以上のメールを取得する処理を組むことができました。
🔗メッセージを一覧表示する – Microsoft Graph v1.0 | Microsoft Learn

bf72c59cdaa969c323261c4135039111

これは “メールを取得する (V3)” アクションと同じくメール一覧を取得するためのリクエストであり、一度のリクエストで取得できるメール数の上限が1000件という点でも変わりません。
しかしながら、こちらのレスポンスには取得したメールについての情報に加え、”@odata.nextLink” という項目があります。
そして、”@odata.nextLink” には、取得しきれなかったメールを取得するための URI が格納されているのです。

この値を次の “HTTP 要求を送信します” アクションの URI に指定することを繰り返すことで、1000件以上でも全てのメールを取得することができるというわけです。

9f1136f1e9ed38b5141c702506955189 1

💡”@odata.nextLink” は対象のメールをすべて取得できた場合には項目ごと返されません。
そのため、coalesce関数が便利かと思います。
🔗Blank、 Coalesce、 IsBlank、および IsEmpty 関数 – Power Platform | Microsoft Learn

以上