はじめに
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"
]
}
}
おわりに
非常にお手軽ですね。
何かと似たようなメールを送信するシーンはあるので、活用してぼたんぽちー!で終わらせたいものです。







