はじめに
Power AutomateのOffice 365 Outlook
、大変便利で重宝するシーンが多いです。
しかしながら、メールの下書きを作成する というアクションが存在しません。
2024.03.10時点の情報です
Google WorkspaceでGoogle Apps Script
を活用したことがある場合、なおのことそう思うシーンはないでしょうか?
function CreateDraft() {
let recipient = "aaa@gmail.com";
let subject = "テストです";
let body = "ここは本文です";
let options = {
cc: "cc@gmail.com",
bcc: "bcc@gmail.com"
};
// ここでメール下書き作成
GmailApp.createDraft(recipient, subject, body, options);
}
メールの自動送信
は非常に便利ですが、設定を誤ると事故につながる場合も。
そんなときに、SNSで尊敬しているささみさんが下記のブログを掲載されていました。
上記を活用し、Microsoft Lists (SharePoint Listsで代替可能)とPower Automateで、Outlookの下書きを複数設定し、気軽に送信できるツールを作りたいと思います!
Microsoft Lists
Microsoft ListsとSharePoint Listsについて、よくごっちゃになって語られることがありますが、実態としては別物です。
- Microsoft Listsは、Microsoft 365の製品群の中でも独立したアプリケーション
- SharePoint Listsは、SharePoint内に統合されたカスタマイズオプションを持つ機能
Lists
を開くと、上記すべてのリストが表示されるので、同一のものでは🧐?という印象を受けますが、厳密には違うのよ
くらいに捉えてください。
にわかなので深堀はやめておきます。
メールの下書きツールは、自分のアカウントに紐づく関係ことから、マイリストを使った運用を想定しています。
実現する機能
Listsの列の書式設定
を一工夫し、選択した行のSubject
、Body
、To
、Cc
、Bcc
からメールの下書きを自動作成するツールを作成します。
イメージはこちら
ボタンをクリックすると、Outlookでメールの下書きが作られるツールです。
テンプレートの増減にも対応できるところがNice👍
列の書式設定
Listsの列の書式設定
に一工夫加えることで、列にボタンを設定し、Power Automateを実行することができます。
右側にパネルが表示されるので、JSONを設定します。
設定するJSONはコチラ!
{
"$schema": "https://developer.microsoft.com/json-schemas/sp/v2/column-formatting.schema.json",
"elmType": "button",
"customRowAction": {
"action": "executeFlow",
"actionParams": "{\"id\": \"ここにGUIDを設定してください\"}"
},
"attributes": {
"class": "ms-fontColor-themePrimary ms-fontColor-themeDarker--hover"
},
"style": {
"border": "none",
"background-color": "transparent",
"cursor": "pointer"
},
"children": [
{
"elmType": "span",
"attributes": {
"iconName": "Fluent UIのアイコンを設定する場所はこちら"
},
"style": {
"padding-right": "6px"
}
},
{
"elmType": "span",
"txtContent": "文字列の設定場所"
}
]
}
非常にCool。
列の書式設定のサンプルは、Microsoft 365 & Power Platform Community
のGitHubを参考にしました。
最高にCoolなサンプルが盛りだくさんで、リポジトリを見ているだけで、時間が溶けます。
内蔵するIconは、Fluent UIから見つけることができます。
映えます。
JSON
のうち、
"customRowAction": {
"action": "executeFlow",
"actionParams": "{\"id\": \"ここにGUIDを設定してください\"}"
}
上記の箇所にGUID
を設定します。
GUIDは、Power Automate フローのURL /flows/
以降の箇所の文字列が該当します。
こちらで設定したJSONから、Power Automateから選択したアイテムの場合
トリガーが発火されます。
Power Automateフロー
上記を参考に、選択した行の情報からメールの下書きを作成する
フローを作成します。
固定メール📨で添付ファイルを使いまわすシーンが思いつかない(そういう業務は見直しません?)ということで添付ファイルは、この記事では触れません。
フロー 詳細
フロー完了後の画面にしているのは、なんとなくmanual
って表示されるモダンの画面だと伝わりにくいな・・・という偏見からです
- [トリガー] 選択したアイテムの場合
- [アクション] 項目の取得 - Listsの行の値を取得
- [アクション] 選択 - 行の値から、
To
のオブジェクトを作成 - [アクション] 選択 - 行の値から、
Cc
のオブジェクトを作成 - [アクション] 選択 - 行の値から、
Bcc
のオブジェクトを作成 - [アクション] 作成 - JSONの作成
- [アクション] HTTP 要求を送信
作るものはOutlook 365コネクタ
で送信するHTTP 要求を送信
アクションのBodyです。
ここをデータ操作
で加工することがポイントになります。
Listsの設定は下記の通り
名前 | 種類 | コメント |
---|---|---|
Flow | 1行テキスト | Power Automate起動用でBlank想定 |
Subject | 1行テキスト | メールのタイトル、必須列に設定 |
Body | 複数行テキスト | メール本文、リッチテキストではない仕様 |
To | ユーザーまたはグループ | 複数選択を許可 |
Cc | ユーザーまたはグループ | 複数選択を許可 |
Bcc | ユーザーまたはグループ | 複数選択を許可 |
To
、Cc
、Bcc
列が複数選択を許可
されていることから、項目の取得
アクションの戻り値が配列(Array)
になります。ここを選択
アクションでマッピングします。
選択 アクション - ほぼ共通
手っ取り早く、中身を紹介します。
To
、Cc
、Bcc
列ほとんど共通です。
{
"type": "Select",
"description": "toRecipientsの設定",
"inputs": {
"from": "@body('項目の取得')?['Person']",
"select": {
"emailAddress": {
"name": "@item()?['DisplayName']",
"address": "@item()?['Email']"
}
}
},
"runAfter": {
"項目の取得": [
"Succeeded"
]
}
}
配列の戻り値が設定されるTo
、Cc
、Bcc
をFrom
に設定し、上記の形でマッピングします。
作成
選択
を繰り返したあと、HTTP要求のボディを作成します。
To
やCc
、Bcc
の配列は、空配列でもHTTP要求の成否に影響しません。
{
"type": "Compose",
"inputs": {
"subject": "@{body('項目の取得')?['Title']}",
"body": {
"contentType": "Text",
"content": "@{body('項目の取得')?['Body']}"
},
"toRecipients": "@body('選択_toRecipients')",
"ccRecipients": "@body('選択_ccRecipients')",
"bccRecipients": "@body('選択_bccRecipients')"
},
"runAfter": {
"選択_bccRecipients": [
"Succeeded"
]
}
}
HTTP 要求の送信でおわり
あとは、ブログを参考にHTTP要求を設定しておしまいです。
{
"type": "OpenApiConnection",
"inputs": {
"parameters": {
"Uri": "https://graph.microsoft.com/v1.0/me/messages",
"Method": "POST",
"Body": "@outputs('作成_メールJSON')",
"ContentType": "application/json"
},
"host": {
"apiId": "/providers/Microsoft.PowerApps/apis/shared_office365",
"connection": "shared_office365",
"operationId": "HttpRequest"
}
},
"runAfter": {
"作成_メールJSON": [
"Succeeded"
]
}
}
おわりに
非常にお手軽ですね。
何かと似たようなメールを送信するシーンはあるので、活用してぼたんぽちー!で終わらせたいものです。