🍱

Microsoft Lists にメール下書き作成ツールを用意して Power Automate Desktop から使う

2024/04/03に公開

PAD で作成したメールを、リストを経由して下書き保存する

はじめに

PAD でメールの下書き保存がしたい場面があります。しかし、アクションでは用意されていないため (用意されましたが、そういうていで話を続けます)、UI オートメーションで直接 Outlook を操作するか、スクリプトを使うか、どちらかしかない。…………そう思っていました。
しかし、別の方法で解決できました。

この記事は、Gatsuo De'modori さんの『Power Automate & Microsoft Lists でメール下書き作成ツールを作る』に影響を受けて書きました。下記の記事も忘れずにご覧ください。

https://qiita.com/DEmodoriGatsuO/items/56dccd579f54b8b6c975

また、記事中で言及されている、ささみさんの記事も大変参考になりました。
ありがとうございました。

https://sasami-axis.hatenablog.com/entry/2024/01/28/195401


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 フローの作成

こんな感じになりました。

PA の全体図

  1. アイテムが作成されたとき
    トリガー条件に、自分が作ったアイテムだけ発火するように条件を入れています。
    トリガー条件: @contains(triggerBody()?['Author']?['Claims'],'自分のユーザー名')

  2. メールアドレスの設定
    Gatsuo De'modori さんの記事では選択アクションを使ってスマートに実現していて真似したかったのですが、うまく設定できなくてこんなありさまになっています。

    1. TO から説明します。まず、変数を初期化
      変数の型: Array

    2. 次に、メールアドレスをただのテキストとして受け取っているので、foreach で分割
      パラメーター: split(triggerBody()?['TO'],';')

    3. 配列変数に追加

      {
        "emailAddress": {
          "address": "@{items('TO_リスト')}"
        }
      }
      
    4. CC と BCC は、空で渡したときにエラーにならないように if 文で分岐
      empty関数を使うと bool 値が返ってくるので if 文の右を入れなくてもうまく動いてくれます。
      条件式: empty(triggerBody()?['CC']) is equal to

    他は TO と同じように設定します。BCC も同様。

  3. この段階で一度下書きを作成


    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')}
    }
    
  4. 添付ファイルのありなしで分岐
    こっちは右にtrueを入れます。
    if @triggerBody()?['{HasAttachments}'] is equal to true

  5. アイテムが作成されたときの ID を使って添付ファイルを取得
    "itemId": "@triggerBody()?['ID']"

  6. 添付ファイルを順番に取り出し

  7. 添付ファイルのコンテンツの取得
    "itemId": "@triggerBody()?['ID']",
    "attachmentId": "@items('それぞれに適用する')?['Id']"

  8. 下書きを作成したときの 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']}"
    }
    

  9. 最後に項目を削除
    "id": "@triggerBody()?['ID']"

おしまい。


PAD フロー (参考)

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
  • 詳細
    1. メールアドレスは、セミコロン(;)区切りで複数指定可能です。
    2. メールの本文は、テキスト、または HTML 形式が使用できます。
    3. 本文の種類は、 text か html で指定してください。
    4. 添付ファイルはフルパスで指定してください。添付なしの場合は、%[]% を渡してください。
    5. 重要度で使用可能な値は、low、normal、および high です。

PAD のフローも PA 同様に、最初にリストの項目(メールの本文)を追加してから、
添付ファイルがある場合にファイルを foreach でリストに追加します。

  1. 項目の作成アクションまでで一度、デバッグ実行して戻り値を確認します。
    こんな感じで値が返ってきます。

    この値を、添付ファイルの追加で使います。
    .ID: %PostItemResponse.ID%

気になる点

これで作成された下書きについて

自分はプレゼンス情報が表示されますが、他のユーザーは表示されません。

  • 従来の Outlook for Windows

    • 下書きを開いて待っていると自動で他のユーザーのプレゼンス情報が表示されます。
  • 新しい Outlook for Windows

    • いつまで経ってもプレゼンス情報が表示されません。
      右クリック > [編集]を選んで > Escキーを押下すると > 表示される

自分は最初から見れる


おわりに

良い感じにできたのでは? と思ったのですが……使わないですね。
これからは 下書き保存も Outlook アクションを使えば良いです。

Discussion