Outlook の特定のフォルダーにあるメールを対象に Power Automate で一括処理をしてしまおうと思いました。しかし、Office 365 Outlook コネクタの「メールを取得する (V3)」アクションでは、取得できるメールの件数は最大 25 件となるようです。
しかし Outlook のフォルダーには 150 件ほどのメールがあります。これは一体どうしたら良いんだろう……。というので、その制限を乗り越える方法を調べて試してみました。
「メールを取得する (V3)」アクションの制限
今回の問題となっている制限は、アクションの設定の「上」という項目で指定できる取得するメールの件数です。ここで設定できる値の最大値が 25 となっており、これより多くのメールを取得できません。
「HTTP 要求を送信します」アクションを利用
この制限以上のメールを一度に取得するには、Office 365 Outlook コネクタの「HTTP 要求を送信します」アクションが利用できます。このアクションから Microsoft Graph API という API を直接呼び出すことができます。
メールを取得するには、アクションの「URI」を設定する必要があります。設定例をいくつかあげてみます。
優先受信トレイのメールのみを 150 件取得する
設定項目 | 設定例 |
---|---|
URI | https://graph.microsoft.com/v1.0/me/mailFolders/Inbox/messages?$filter=inferenceClassification eq ‘focused’&$orderby=inferenceClassification,receivedDateTime desc&$top=150 |
メソッド | GET |
コンテンツの種類 | application/json |
指定したフォルダーのメールを 150 件取得する
設定項目 | 設定例 |
---|---|
URI | https://graph.microsoft.com/v1.0/me/mailFolders/AAMkAGQ3YjAwZmVABCDABCDABCDABCDABCDABCDABCDABCDABCDABCDABCDABCDABCDABCDABCDABCDU2AEDAAYEPGekAAA=/messages?$top=150 |
メソッド | GET |
コンテンツの種類 | application/json |
フィルダーの指定は、URI に含まれる mailFolders
に続くフォルダーパスの ID によって行います。フォルダーパスの ID を取得するには、メールを取得する (V3) アクションを利用するのが手軽です。フォルダーを設定したメールを取得する (V3) アクションを実行すると、未加工入力の表示に folderPath
の値としてフォルダーパスの ID を確認できます。ここでは「Id::AAMkAGQ3Y…」のような表記になっていますが、先頭の「Id::」を省いたものがフォルダーパスの ID です。
URI のポイントは $top の設定
さて、今回の件に関するポイントは、上記に例示した URI の一番最後にある $top=150
の部分です。ここで取得するメールの上限数を設定することができますので、目的に合わせて必要な数を指定します。
ここで設定するのは上限数なので、取得したいメール数とピッタリ同じである必要はありません。フォルダーを指定してそのフォルダーの中にあるメールすべてに処理を行いたい場合、フォルダーに 155 件のメールが入っていれば $top
の値を 160 や 200 と指定すれば大丈夫です。
アクションの結果は「JSON の解析」で処理
HTTP 要求を送信しますアクションの結果は、「JSON の解析」アクションを利用し後続のアクションで利用しやすいように加工しておきましょう。
さいごに
あらかじめ用意されているアクションの制限を乗り越えるには、「HTTP 要求を送信します」アクションを利用できます。ただし、利用するには Microsoft Graph API の知識が必要になるため、一気にハードルが上がってしまいますね。普段は標準のアクションを上手に利用し、どうしてもという場合には、こういった方法もあるんだよと思い出せるようにしておくと良さそうです。