IT Hands-on Lab

小規模組織向けIT環境の構築・運用に役立つ情報を、ハンズオン形式で紹介しています。

【Power Automate】添付ファイル付きOutlookメール Teamsチャネル投稿1

PowerAutomate 添付ファイル付きOutlookメールをTeamsチャネルに投稿する1

Microsoft社が提供するローコード開発ツール「Power Platform」のフロー機能(Power Automate)を使用した、Outlookで受信した添付ファイル付きメールをTeamsのチームチャネルに投稿し、チーム内で共有する設定例を紹介します。
取引先からメール送付された請求書、外部からの問合せ受付メールの管理、会員メールの他メンバーへの共有等、様々な用途で活用できます。
  • 操作環境:
    • OS:Windows 11
    • Webブラウザー:Edge
  • 使用プラン:Microsoft 365 Business Premium(試用版)

 

 

業務シナリオ整理

この例では、以下のような業務シナリオにもとづき、処理を実装します。

現在、複数人の請求書担当者が取引先から各々請求書を受領し、各々支払処理を行っている。担当者不在時のメールの確認漏れや担当者間のコミュニケーション不足による、支払漏れや二重支払いが時々発生しそうになる。
請求書受付用グループメールアドレスを用意するだけでは受信メールの確認漏れが発生するため、添付ファイル含めた受信メールをTeamsチャネルに自動投稿し、請求書担当者間で共有管理することで上記リスクを回避したい。

図表1-1 業務シナリオの整理

図表1-1 業務シナリオの整理

 

実装上の注意点

以下の通り、実装上の注意点を洗い出しました。

  1. 受信日時のタイムゾーン考慮
    SharePointフォルダーに添付ファイルを保存する際、フォルダー名にメールの受信日時を使用する。Power Automate内のタイムゾーンは世界標準時のため、受信日時を日本時間に置き換えて使用する。
  2. フォルダー名の禁則文字の置換 (参考記事)
    SharePointフォルダーに添付ファイルを保存する際、フォルダー名にメールの件名を使用する。フォルダー名に使用できない文字があると処理に失敗するため、ハイフン等の別の文字に置き換える。
  3. メール本文の改行コードの置換 (参考記事)
    メール本文の改行コード「\r\n」がTeams投稿時に無視されるため、改行タグ「<BR>」に置き換える。
  4. Teams投稿メッセージのサイズ考慮 (公式記事)
    サイズの大きいHTMLメールをTeamsに投稿する場合、サイズ上限超えで処理に失敗することがある。失敗時は本文プレビューを投稿する処理を追加する。
  5. Teams投稿アクションのHTML表示の不具合への対応
    Teams投稿アクションの投稿内容をHTMLで記述すると、画面表示がおかしくなることがある。[データ操作(Data Operation)>作成]アクションでHTMLベースの投稿内容を定義し、Teams投稿アクションでこれを呼び出す形とする。
  6. ステップ名でのアンダーバー使用の回避(任意)
    ステップ名にアンダーバーを使用すると、画面上半角スペースに見えて誤認識しやすい。関数内でステップを呼び出す際、ステップ名の記述誤りが発生しやすいため、代わりにハイフンを使う。

 

Teamsのチーム用意

システム管理者にてWebブラウザーよりMicrosoft Teams管理センターにアクセスし、左メニューの[チーム>チームを管理]を選択し、[追加]を選択します。

図表3-1 Teams管理センターでのチーム追加

図表3-1 Teams管理センターでのチーム追加

 

チームの名前(グループメールアドレスの@から左部分の値にもなるので要配慮)を入力し、[プライバシー]は[プライベート]を選択し、[適用]を選択します。
メンバーでは各請求書担当者を選択し、[適用]を選択します。

図表3-2 チームやメンバーの設定

図表3-2 チームやメンバーの設定

 

チームの作成が完了しました。
この後、このチームのグループメールアドレスで外部からのメールを受信できるように設定します。

図表3-3 チームの追加完了

図表3-3 チームの追加完了

 

Exchange管理センターにアクセスし、左メニューの[受信者>グループ]を選択し、図表3-2で作成したチームのグループメールアドレスを選択します。

図表3-4 Exchange管理センターでのグループメール選択

図表3-4 Exchange管理センターでのグループメール選択

 

[メンバー]タブを選択し、次の工程で作成するフローの実行者がメンバーに含まれていることを確認します(この例ではシステム管理者)。含まれていない場合は、下のリンク[すべてのメンバーの表示と管理]から追加します。
[設定]タブを選択し、全体設定の上二つのチェックをつけ、[保存]を選択します。

図表3-5 グループメンバーの確認と設定

図表3-5 グループメンバーの確認と設定

 

Power Automateによるフロー実装

Power Automateの画面にアクセスし、左メニューの[作成]を選択し、[自動化したクラウドフロー]を選択します。

図表4-1 PowerAutomate クラウドフロー作成

図表4-1 PowerAutomate クラウドフロー作成

 

トリガーの作成

フロー名を適宜入力し、検索欄に[Outlook]と入力し、[新しいメールが届いたとき(V3)]を選択し、[作成]を選択します。
[パラメーター]タブの詳細パラメーターを以下の通り設定します。

  • ToまたはCC:payments@xxxxxx.com(前の工程で作成したチームのグループメールアドレス)
  • 添付ファイルを含める:はい
  • フォルダー:受信トレイ
    *このフローに接続している受信者がメールの振り分け行っている場合、フォルダーは振り分け先フォルダーにします

図表4-2 PowerAutomate トリガーの作成

図表4-2 PowerAutomate トリガーの作成

 

変数の初期化

ここからは[+]アイコンよりアクションのステップを追加していきます。

 

ランタイムで[組み込み]を選択し、[Variable]を選択します。
[変数を初期化する]を選択します。

図表4-3 各ステップの設定(変数初期化の追加-prohibited-character)

図表4-3 各ステップの設定(変数初期化の追加-prohibited-character)

 

実装上の注意点の項番2の通り、禁則文字用の配列を定義します。
[パラメーター]タブの項目を以下の通り設定します。

  • Name:prohibited-character
  • Type:Array
  • Value(関数):createArray('"','*',':','<','>','?','/','\','|',' ','#','%','   ')
    *Valueの配列の最後の要素はタブ文字です

また、ステップ名を分かりやすいものに調整した方が良いですが、実装上の注意点の項番6の通り、アンダーバーが半角スペースに見えるため注意が必要です。

図表4-4 各ステップの設定(変数初期化の設定-prohibited-character)

図表4-4 各ステップの設定(変数初期化の設定-prohibited-character)

 

同じ要領で、禁則文字を置き換えた後の件名を格納する変数を追加します(画面割愛)。

  • ランタイム:組み込み
  • アクション:Variable>変数を初期化する

[パラメーター]タブの項目を以下の通り設定します。

  • Name:replaced-subject
  • Type:String
  • Value(項目):件名

図表4-5 各ステップの設定(変数初期化-replaced-subject)

図表4-5 各ステップの設定(変数初期化-replaced-subject)

 

 

 

値の変換

メールの受信日時を日本時間に変換した値を求めます。
ランタイムで[組み込み]を選択し、[Date Time]を選択します。
[タイムゾーンの変換]を選択します。

図表4-6 各ステップの設定(タイムゾーン変換の追加)

図表4-6 各ステップの設定(タイムゾーン変換の追加)

 

[パラメーター]タブの項目を以下の通り設定します。

  • Base Time(項目):受信日時
  • Source Time Zone:(UTC)Coordinated Universal Time
  • Distination Time Zone:(UTC+09:00)Osaka,Sapporo,Tokyo
  • Time Unit(カスタム):yyyyMMdd-HHmmss

図表4-7 各ステップの設定(タイムゾーン変換の設定)

図表4-7 各ステップの設定(タイムゾーン変換の設定)

 

メールの件名の禁則文字を置き換えた値を求めるにあたり、禁則文字の配列を各々処理するアクションを追加します。
ランタイムで[組み込み]を選択し、[Control]を選択します。
[それぞれに適用する]を選択します。

図表4-8 各ステップの設定(それぞれに適用の追加)

図表4-8 各ステップの設定(それぞれに適用の追加)

 

[パラメーター]タブの項目を以下の通り設定します。

  • Select An Output From Previous Steps(項目):prohibited-character
*項目選択で設定したい項目が検索しても表示されない場合は、画面右側のように関数で項目を指定する形でも代用できます

図表4-9 各ステップの設定(それぞれに適用の設定)

図表4-9 各ステップの設定(それぞれに適用の設定)

 

メールの件名の禁則文字を置き換えた値を求めるにあたり、データ操作のための一時領域を追加します。
ランタイムで[組み込み]を選択し、[Data Operation]を選択します。
[作成]を選択します。
[パラメーター]タブの項目を以下の通り設定します。

  • 入力(項目):replaced-subject

図表4-10 各ステップの設定(データ作成の追加-replaced-subject)

図表4-10 各ステップの設定(データ作成の追加-replaced-subject)

 

メールの件名の禁則文字を置き換えた値を求めます。
ランタイムで[組み込み]を選択し、[Variable]を選択します。
[変数の設定]を選択します。

図表4-11 各ステップの設定(変数設定の追加-replaced-subject)

図表4-11 各ステップの設定(変数設定の追加-replaced-subject)

 

[パラメーター]タブの項目を以下の通り設定します。

  • Name:replaced-subject
  • Value(関数):replace(outputs('作成-replaced-subject'),item(),'-')
*関数内の「作成-replaced-subject」は直前のステップの名前です。禁則文字を半角ハイフンに置き換え、replaced-subjectにセットしています

図表4-12 各ステップの設定(変数設定の設定-replaced-subject)

図表4-12 各ステップの設定(変数設定の設定-replaced-subject)

 

添付ファイル有無の分岐の作成

Teams投稿内容について、添付ファイル付きのメールを受信した時のみ格納先リンクを表示します。この分岐を追加します。

 

ランタイムで[組み込み]を選択し、[Control]を選択します。
[条件]を選択します。

図表4-13 各ステップの設定(分岐の追加)

図表4-13 各ステップの設定(分岐の追加)

 

[パラメーター]タブの項目を以下の通り設定します。

  • 対象(項目):添付ファイルあり
  • 演算子:is equal to
  • 値(関数):true

図表4-14 各ステップの設定(分岐の設定)

図表4-14 各ステップの設定(分岐の設定)

 

分岐内処理:false(添付ファイルなし)

ここからfalseの分岐内処理を設定していきます。


まず、実装上の注意点の項番5の通り、Teams投稿内容を格納する一時領域を追加します(画面割愛)。

  • ランタイム:組み込み
  • アクション:Data Operation>作成

[パラメーター]タブの項目を画面イメージの通り設定します。その際、本文は実装上の注意点の項番3の通り、改行コードの置き換えを行います。

  • 本文(関数): uriComponentToString(replace(uriComponent(triggerBody()?['Body']), '%0D%0A', '<br>'))

図表4-15 各ステップの設定(Teams投稿内容作成-false)

図表4-15 各ステップの設定(Teams投稿内容作成-false)

 

Teamsチャネルの投稿用アクションを追加します。
ランタイムで[標準]を選択し、[Microsoft Teams]を選択します。
[チャットまたはチャネルでメッセージを投稿する]を選択します。

図表4-16 各ステップの設定(Teams投稿内容作成-false)

図表4-16 各ステップの設定(Teams投稿内容作成-false)

 

[パラメーター]タブの項目を以下の通り設定します。

  • 投稿者:ユーザー
  • 投稿先:Channel
  • Team:payments
  • Channel:General
  • Message(項目):前のステップで作成した一時領域
  • Subject(項目):件名

図表4-17 各ステップの設定(Teams投稿-false)

図表4-17 各ステップの設定(Teams投稿-false)

 

実装上の注意点の項番4の通り、投稿サイズ上限を考慮した失敗時の処理を追加します。
ランタイムで[組み込み]を選択し、[Control]を選択します。
[スコープ]を選択します。

図表4-18 各ステップの設定(スコープの追加)

図表4-18 各ステップの設定(スコープの追加)

 

[設定]タブを選択し、前のステップ名(この例では[チャットまたはチャネルでメッセージを投稿する-false])を展開し、[失敗しました]のみチェックをつけます。
これにより、スコープ内に追加したアクションは、前のステップが失敗したときのみ実行されるようになります。

図表4-19 各ステップの設定(スコープの設定-false-失敗時)

図表4-19 各ステップの設定(スコープの設定-false-失敗時)

 

分岐内処理:false:失敗時(添付ファイルなし・投稿失敗)

図表4-15と同じ要領で、Teams投稿内容を格納する一時領域を追加します(画面割愛)。

  • ランタイム:組み込み
  • アクション:Data Operation>作成

[パラメーター]タブの項目を画面イメージの通り設定します。本文に関しては、今回は本文のプレビューを選択します。

図表4-20 各ステップの設定(Teams投稿内容-false-失敗時)

図表4-20 各ステップの設定(Teams投稿内容-false-失敗時)

 

図表4-16と同じ要領で、 Teamsチャネルの投稿用アクションを追加します(画面割愛)。

  • ランタイム:標準
  • アクション:Microfost Teams >チャットまたはチャネルでメッセージを投稿する

[パラメーター]タブの項目を以下の通り設定します。

  • 投稿者:ユーザー
  • 投稿先:Channel
  • Team:payments
  • Channel:General
  • Message(項目):前のステップで作成した一時領域
  • Subject(項目):件名

図表4-21 各ステップの設定(Teams投稿-false-失敗時)

図表4-21 各ステップの設定(Teams投稿-false-失敗時)

 

一旦ここまで作成できました。

図表4-22 PowerAutomateフローの概観

図表4-22 PowerAutomateフローの概観

 

次の記事では、フロー作成のtrue(添付ファイルあり)の分岐内処理と、動作確認を進めていきます。

 

 

当ブログ内の連載記事

elmgrn.hatenablog.com