くらっちのクラウド日記

仕事や勉強で得た Microsoft 365 関連の技術知識を投稿していくブログです。

【PowerAutomate】SharePointグループのメンバーを抽出してメールを送りたい

はじめに

SharePoint グループにはメールアドレスがないので、SharePointグループに対してメールを送れません。
しかし、PowerAutomate を使えば SharePointグループ に含まれるメンバーを抽出して、メールを送ることができます。

フローの完成イメージはこんな感じです。
一つ一つ手順を説明していきたいと思います。

目次

手順

SharePoint グループからメンバーを取得して全員にメールを送るフローを作成します。
1~4の順番にアクションを追加してください。

1.SharePoint に HTTP 要求を送信します

このアクションでSharePointグループに含まれる全メンバーのユーザー情報を取得します。
対象のサイトを選択して、URIには下記を入力してください。

URI:_api/web/sitegroups/getByName('SharePointグループ名')/users

結果、下記例のような情報を取得(出力)します。※一部省略

{
    "d": {
        "results": [
            {
                "__metadata": {"省略"},
                "Alerts": {"省略"},
                "Groups": {"省略"},
                "Id": 21,
                "IsHiddenInUI": false,
                "LoginName": "i:0#.f|membership|testuser@contoso.onmicrosoft.com",
                "Title": "テスト 太郎",
                "PrincipalType": 1,
                "Email": "testuser@contoso.onmicrosoft.com",
                "Expiration": "",
                "IsEmailAuthenticationGuestUser": false,
                "IsShareByEmailGuestUser": false,
                "IsSiteAdmin": false,
                "UserId": {
                    "NameId": "100320004d7fed7c",
                    "NameIdIssuer": "urn:federation:microsoftonline"
                },
                "UserPrincipalName": "testuser@contoso.onmicrosoft.com"
            }
        ]
    }
}

2.選択

「動的なコンテンツの追加」からそれぞれ下記の式を入力します。

開始 :{body('SharePoint_に_HTTP_要求を送信します')?['body']?['d']?['results']}

マップ:item()?['Email']

開始は、情報を取得する場所を示します。
SharePoint に HTTP 要求を送信します」アクションの出力結果を見ると ['d'] > ['results'] の下に各種ユーザー情報が含まれているのでそこから情報を取得します。

マップで item()?['Email'] とすることで取得した情報のうち Email 部分のみを抽出します。
今回の場合は、SharePoint グループに含まれるメンバーのメールアドレスを取得しているわけです。

結果、下記のように出力されます。

kurattyo@contoso.co.jp, testuser@contoso.co.jp, admin@contoso.co.jp

3.作成

「選択」アクションで取得した値はカンマ区切りです。
しかし、メールの宛先として使う場合はセミコロン区切りに修正する必要があるので、join関数で「選択」アクションで取得したメールアドレスをカンマ区切りに修正します。

「動的なコンテンツの追加」から下記の式を入力します。

入力: {join(body('選択'),';')}


結果、下記のように修正されて出力されます。

kurattyo@contoso.co.jp; testuser@contoso.co.jp; admin@contoso.co.jp

4.メールの送信

最後に抽出したメンバー全員にメールを送信します。
宛先で「作成」アクションの「出力」を選択します。

「作成」アクションでメールアドレスをセミコロン区切りにしたので、今回抽出した全ユーザに対して一度にメール送信ができるようになっています。

その他:1ユーザーごとにメール送信したい場合

「4.メールの送信」の宛先に、「作成」アクションの「出力」を選択すると全員に一括送信されます。
しかし、1ユーザーごとにメールを送信したい場合はどうすればよいのでしょうか?

「Apply to each」を追加してその中に「メールの送信」を配置します。
「以前の手順から出力を選択」に「選択」アクションの「出力」を配置してください。

「選択」アクションの「出力」は下記のようにカンマ区切りのメールアドレスが入っています。
カンマ区切りのメールアドレスを利用すると、1ユーザーごとに処理が行われるようになります。

kurattyo@contoso.co.jp, testuser@contoso.co.jp, admin@contoso.co.jp

参考

Power Automate get SharePoint Group Members & flow code snippets【YouTube】