Microsoft Lists にメール下書き作成ツールを用意して Power Automate Desktop から使う
PAD で作成したメールを、リストを経由して下書き保存する
はじめに
PAD でメールの下書き保存がしたい場面があります。しかし、アクションでは用意されていないため (用意されましたが、そういうていで話を続けます)、UI オートメーションで直接 Outlook を操作するか、スクリプトを使うか、どちらかしかない。…………そう思っていました。
しかし、別の方法で解決できました。
この記事は、Gatsuo De'modori さんの『Power Automate & Microsoft Lists でメール下書き作成ツールを作る』に影響を受けて書きました。下記の記事も忘れずにご覧ください。
また、記事中で言及されている、ささみさんの記事も大変参考になりました。
ありがとうございました。
PAD から SharePoint アクション を使用してメールの下書きを作成
具体的には、PAD でリストに項目(メール)を作成するフローと、
リストに項目(メール)が作成されたら PA で下書き作成するフローの 2 段構えになっています。
-
特徴
- UI オートメーションを使用しないので、安定した動作が期待できます。
-
前提
- 使用するツールは PA, PAD, リストの 3 つです。
- PAD からリストに項目を作成するアクションは、プレミアムライセンスが必要です。
-
補足
- リストは一時的に使いますが、内容は残しません。下書き作成後に項目を削除します。
リストの設定
リストはこんな感じにしてみました。
名前 | 種類 | 既定値 | コメント |
---|---|---|---|
subject | タイトル列 | なし | 件名 |
body | 複数行テキスト | なし | 本文 |
to | 複数行テキスト | なし | TO |
cc | 複数行テキスト | なし | [CC] |
bcc | 複数行テキスト | なし | [BCC] |
importance | 選択肢 | normal | 重要度 (normal, high, low) |
contentType | 選択肢 | text | 形式 (text, html) |
作成するメールの本文はテキスト・HTML 形式の両方を作成できますが、
リストの設定は、書式なしテキストを使います。
リッチテキスト、拡張リッチテキストには設定しません。
拡張リッチ テキストを使用 → いいえ に設定してください。
メールアドレスは、セミコロン区切りのテキストを入力します。
PAD でメール送信などのアクションに渡す変数と共通化するために、あえてテキストにしています。
PA フローの作成
こんな感じになりました。
-
アイテムが作成されたとき
トリガー条件に、自分が作ったアイテムだけ発火するように条件を入れています。
トリガー条件:@contains(triggerBody()?['Author']?['Claims'],'自分のユーザー名')
-
メールアドレスの設定
Gatsuo De'modori さんの記事では選択アクションを使ってスマートに実現していて真似したかったのですが、うまく設定できなくてこんなありさまになっています。-
TO から説明します。まず、変数を初期化
変数の型:Array
-
次に、メールアドレスをただのテキストとして受け取っているので、foreach で分割
パラメーター:split(triggerBody()?['TO'],';')
-
配列変数に追加
{ "emailAddress": { "address": "@{items('TO_リスト')}" } }
-
CC と BCC は、空で渡したときにエラーにならないように if 文で分岐
empty
関数を使うと bool 値が返ってくるので if 文の右を入れなくてもうまく動いてくれます。
条件式:empty(triggerBody()?['CC'])
is equal to
他は TO と同じように設定します。BCC も同様。
-
-
この段階で一度下書きを作成
URI:https://graph.microsoft.com/v1.0/me/messages
本文{ "subject": "@{triggerBody()?['Title']}", "importance": "@{triggerBody()?['importance']?['Value']}", "body": { "contentType": "@{triggerBody()?['ContentType0']?['Value']}", "content": "@{replace(triggerBody()?['Body'],'"','\"')}" }, "toRecipients": @{variables('ToList')}, "ccRecipients": @{variables('CcList')}, "bccRecipients": @{variables('BccList')} }
-
添付ファイルのありなしで分岐
こっちは右にtrue
を入れます。
if@triggerBody()?['{HasAttachments}']
is equal totrue
-
アイテムが作成されたときの ID を使って添付ファイルを取得
"itemId":"@triggerBody()?['ID']"
-
添付ファイルを順番に取り出し
-
添付ファイルのコンテンツの取得
"itemId":"@triggerBody()?['ID']",
"attachmentId":"@items('それぞれに適用する')?['Id']"
-
下書きを作成したときの id を使って添付ファイルを追加
URI:https://graph.microsoft.com/v1.0/me/messages/@{outputs('HTTP_要求を送信します_(下書き)')?['body']?['id']}/attachments
本文{ "@odata.type": "#microsoft.graph.fileAttachment", "name": "@{items('それぞれに適用する')?['DisplayName']}", "contentBytes": "@{outputs('添付ファイルのコンテンツの取得')?['body']?['$content']}" }
-
最後に項目を削除
"id":"@triggerBody()?['ID']"
おしまい。
PAD フロー (参考)
別のフローから、「Desktop フローを実行」アクションで呼び出して使用します。
以下の入力変数にメールの作成に必要な値を渡してください。
PAD の入力変数
変数名 | データの種類 | 外部名 | 説明 |
---|---|---|---|
bccRecipients | テキスト | in_bccRecipients | [BCC] |
bodyContent | テキスト | in_bodyContent | メールの本文 |
bodyContentType | テキスト | in_bodyContentType | 本文の種類 |
ccRecipients | テキスト | in_ccRecipients | [CC] |
fileAttachmentPath | リスト | in_fileAttachmentPath | [添付ファイルのパス] |
importance | テキスト | in_importance | メッセージの重要度 |
subject | テキスト | in_subject | メッセージの件名 |
toRecipients | テキスト | in_toRecipients | TO |
- 詳細
- メールアドレスは、セミコロン(;)区切りで複数指定可能です。
- メールの本文は、テキスト、または HTML 形式が使用できます。
- 本文の種類は、 text か html で指定してください。
- 添付ファイルはフルパスで指定してください。添付なしの場合は、%[]% を渡してください。
- 重要度で使用可能な値は、low、normal、および high です。
PAD のフローも PA 同様に、最初にリストの項目(メールの本文)を追加してから、
添付ファイルがある場合にファイルを foreach でリストに追加します。
- 項目の作成アクションまでで一度、デバッグ実行して戻り値を確認します。
こんな感じで値が返ってきます。
この値を、添付ファイルの追加で使います。
.ID:%PostItemResponse.ID%
気になる点
これで作成された下書きについて
自分はプレゼンス情報が表示されますが、他のユーザーは表示されません。
-
従来の Outlook for Windows
- 下書きを開いて待っていると自動で他のユーザーのプレゼンス情報が表示されます。
-
新しい Outlook for Windows
- いつまで経ってもプレゼンス情報が表示されません。
右クリック > [編集]を選んで >Esc
キーを押下すると > 表示される
- いつまで経ってもプレゼンス情報が表示されません。
自分は最初から見れる
おわりに
良い感じにできたのでは? と思ったのですが……使わないですね。
これからは 下書き保存も Outlook アクションを使えば良いです。
Discussion