情シス仕事の備忘録

自身の備忘録を兼ねて、情シス仕事で役に立ちそうな情報を掲載しています

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

Microsoft社が提供するローコード開発ツール「Power Platform」のフロー機能(Power Automate)を使用した、Outlookで受信した添付ファイル付きメールをTeamsのチームチャネルに投稿し、チーム内で共有する設定例を紹介します。
取引先からメール送付された請求書、外部からの問合せ受付メールの管理、会員メールの他メンバーへの共有等、様々な用途で活用できると思います。

・操作環境:
 ・OS:Windows 11
 ・Webブラウザー:Edge
・使用プラン:Microsoft 365 Business Premium(試用版)

 

 

業務シナリオを整理する

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

 

実装上の注意点を洗い出す

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

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

 

Teamsチームを用意する

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

 

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

 

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

 

Exchange管理センターにアクセスし、左メニューの[受信者>グループ]を選択し、先ほど作成したチームのグループメールアドレスを選択します。
※Exchange管理センター:
 https://admin.exchange.microsoft.com/#/homepage

 

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

 

Power Automateでクラウドフローを作成する

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

 

トリガーの作成

フロー名を適宜入力し、検索欄に[Outlook]と入力し、[新しいメールが届いたとき(V3)]を選択し、[作成]を選択します。
[パラメーター]タブの詳細パラメーターを以下の通り設定します。
・ToまたはCC:payments@xxxxxx.com(前の工程で作成したチームのグループメールアドレス)
・添付ファイルを含める:はい
・フォルダー:受信トレイ
※このフローに接続している受信者がメールの振り分け行っている場合、フォルダーは振り分け先フォルダーにします

 

変数の初期化

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


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

 

実装上の注意点の項番2の通り、禁則文字用の配列を定義します。
[パラメーター]タブの項目を以下の通り設定します。
・Name:prohibited-character
・Type:Array
・Value(関数):createArray(‘“’,‘*’,‘:’,‘<’,‘>’,‘?’,‘/’,‘\’,‘|’,‘ ’,‘#’,‘%’,‘   ‘)
※Valueの配列の最後の要素はタブ文字です
また、ステップ名を分かりやすいものに調整した方が良いですが、実装上の注意点の項番6の通り、アンダーバーが半角スペースに見えるため注意が必要です

 

同じ要領で、禁則文字を置き換えた後の件名を格納する変数を追加します(画面割愛)。
・ランタイム:組み込み
・アクション:Variable>変数を初期化する


[パラメーター]タブの項目を以下の通り設定します。
・Name:replaced-subject
・Type:String
・Value(項目):件名

 

値の変換

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

 

[パラメーター]タブの項目を以下の通り設定します。
・Base Time(項目):受信日時
・Source Time Zone:(UTC)Coordinated Universal Time
・Distination Time Zone:(UTC+09:00)Osaka,Sapporo,Tokyo
・Time Unit(カスタム):yyyyMMdd-HHmmss

 

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

 

[パラメーター]タブの項目を以下の通り設定します。
・Select An Output From Previous Steps(項目):prohibited-character
※項目選択で設定したい項目が検索しても表示されない場合は、画面右側のように関数で項目を指定する形でも代用できます

 

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

 

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

 

[パラメーター]タブの項目を以下の通り設定します。
・Name:replaced-subject
・Value(関数):replace(outputs(‘作成-replaced-subject’),item(),’-’)
※関数内の「作成-replaced-subject」は直前のステップの名前です。禁則文字を半角ハイフンに置き換え、replaced-subjectにセットしています

 

分岐の作成

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


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

 

[パラメーター]タブの項目を以下の通り設定します。
・対象(項目):添付ファイルあり
・演算子:is equal to
・値(関数):true

 

分岐内処理:false

ここから、falseの分岐内処理を設定していきます。
まず、実装上の注意点の項番5の通り、Teams投稿内容を格納する一時領域を追加します(画面割愛)。
・ランタイム:組み込み
・アクション:Data Operation>作成

[パラメーター]タブの項目を画面イメージの通り設定します。その際、本文は実装上の注意点の項番3の通り、改行コードの置き換えを行います。
・本文(関数): uriComponentToString(replace(uriComponent(triggerBody()?['Body']), '%0D%0A', '<br>'))

 

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

 

[パラメーター]タブの項目を以下の通り設定します。
・投稿者:ユーザー
・投稿先:Channel
・Team:payments
・Channel:General
・Message(項目):前のステップで作成した一時領域
・Subject(項目):件名

 

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

 

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

 

分岐内処理:false:失敗時

先ほどと同じ要領で、Teams投稿内容を格納する一時領域を追加します(画面割愛)。
・ランタイム:組み込み
・アクション:Data Operation>作成

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

 

先ほどと同じ要領で、 Teamsチャネルの投稿用アクションを追加します(画面割愛)。
・ランタイム:標準
・アクション:Microfost Teams >チャットまたはチャネルでメッセージを投稿する

[パラメーター]タブの項目を以下の通り設定します。
・投稿者:ユーザー
・投稿先:Channel
・Team:payments
・Channel:General
・Message(項目):前のステップで作成した一時領域
・Subject(項目):件名

 

一旦ここまで作成できました。
次の記事では、フロー作成のtrueの分岐内処理と、動作確認を進めていきます。