MoreBeerMorePower

Power Platform中心だけど、ノーコード/ローコード系を書いてます。

Outlook の@メンション入りメッセージを Power Automate から送る

f:id:mofumofu_dance:20210911010326p:plain

Power Automate からのTeamsへのメンションはこのブログの中でも何度も紹介してきましたが、今回はOutlookのメールです。

Outlookのメールでもメンションを利用することができて、メールのフィルターに使えたり、またはメンション部分をマウスでホバーするとその人のプロファイルを見れたりします。

support.microsoft.com

残念ながら Power Automate の Outlookコネクターでは未だに@メンション入りメッセージの送信がサポートされていません。

そこで、本投稿ではGraph APIを利用してメンション入りのメッセージを送信するフローを紹介します。

なお、サンプルのパッケージは以下からダウンロードいただけます。

github.com

フローの全体は下図の通りです。

f:id:mofumofu_dance:20210911005024p:plain

Graph API でのメール送信

Graph APIでメールを送る場合には https://graph.microsoft.com/beta/me/sendMail のURLにリクエストを送ります。

その際、リクエストの本文は以下の形式組み立てる必要があります。

{
    "message": {
        "subject": "Mention message",
        "body": {
            "contentType": "HTML",
            "content": "Message Body"
        },
        "toRecipients": [
            {
                "emailAddress": {
                    "address": "user@example.com"
                }
            }
        ]
    }
}

より詳細には以下のDocsで確認してください。(ちょっと難解ですが)

docs.microsoft.com

メンションを含める

メンションを送信するには2つの手順が必要です。

  1. HTML形式のメッセージにメンションになるようなタグを含める
  2. リクエストの本文にmentionsのプロパティを追加する

簡単な例は以下でも紹介されています。ただし本文が書かれていないですね。

docs.microsoft.com

1. HTMLの整形

ここは決まったフォーマット(classとかidとか)でメンション部分を作る必要があります。

<a id="OWAAM123456" class="J9Y1oNF3ZpoR5LC3M2PHm mention ms-bgc-nlr ms-fcl-b" href="mailto:user@example.com">
@Display Name
</a>

ポイントはhrefのメールアドレス部分と、idOWAAMxxxxxxです。OWAAMのあとは数字6桁なら何でもよさそうです。あとはメンションする相手に合わせてメールアドレスと表示名を設定してください。

今回のフローでは数字6桁の部分はrand()関数でランダムな数字を与えています。

f:id:mofumofu_dance:20210911005348p:plain

また、Graph APIの実行には、PaulのOffice 365 Groupコネクターの方法を利用します。

mofumofupower.hatenablog.com

2. mentionsプロパティ追加

HTMLだけを加工した状態では、メッセージがただしく「メンションされたもの」として扱われません。

Outlook のWebやクライアントアプリ上で"@"が表示されるためにはメッセージの属性にも「誰宛のメンションか」を含める必要があります。

この属性を追加した後のリクエスト本文は以下のようになります。

{
    "message": {
        "subject": "Test message",
        "body": {
            "contentType": "HTML",
            "content": "HTML text"
        },
        "toRecipients": [
            {
                "emailAddress": {
                    "address": "user@example.com"
                }
            }
        ],
        "mentions": [
            {
                "mentioned": {
                    "address": "user1@example.com"
                }
            },
            {
                "mentioned": {
                    "address": "user2@example.com"
                }
            }
        ]
    }
}

mentionsプロパティは配列で、複数人へのメンションがサポートされています。入れ子になっていることにも注意してください。

これで準備はできました。あとはフローを実行するだけです。

サンプルをインポートして接続情報を直せばすぐに使えますので、試してみてください。

github.com