Outlookメッセージの添付ファイルをSharepointサイトに自動保存する方法について解説します。
わたしのテスト環境
今回は以前の記事にて作成した試用期間中のテスト環境でフローを作成しています。
わたしは関数の入力を効率よく快適におこなうために、Power Automateの「試験的な機能」設定をオンにしています。1分でできる設定なので利用していない方は下記の記事を参考に設定することをオススメ致します。
使用するフローの種類とトリガー
フローを作成します。Outlookのメール受信したときに自動でフローを動作させたいので、使用する「自動化したクラウドフロー」を選択してフローを作成します。
Outlookコネクタの「新しいメールが届いたとき」トリガーを使うにゃ。フローのトリガーの種類と違いについては、下記の記事で解説してるので気になる方はみてほしいにゃ。
フローの完成図
Power Automate フロー完成図
フローの完成図です。添付ファイルを保存した後、Teamsに通知を送ります!
Power Automateフロー実行結果
▲ターゲットとなるメールを受信すると、Sharepointの所定のフォルダに受信時刻のフォルダを新規作成して、その中に添付ファイルを保存します。メールごとにフォルダを変えることによって同名ファイルを上書きしてしまわないようにしています。
▲フロー実行の通知としてTeamsにアダプティブカードでメッセージを送信します。
こんな感じでTeamsに通知されるにゃ。ファイルの数だけカードの中にボタン付きのコンテナを作ってるにゃ。クリックすればファイルを開けるにゃ。
(事前準備)Sharepointに保存用フォルダを作成します。
Microsoft365ホーム画面の左上のメニューアイコンをクリックして、メニューの中にあるSharepointアプリをクリックします。
今回はデフォルトで自動的に作成されているサイト(=テナント名と同じサイト)を選択します。
▲①ドキュメントをクリックして、②新規をクリックして、③フォルダを選択します。
▲フォルダ名を入力して作成をクリックします。
▲今回わたしはドキュメントフォルダのトップに保存しました。後でフロー作成の工程でフォルダを選択するので、皆さんも作成した場所は覚えておいてください。
Sharepointサイトのドキュメントのトップフォルダは「Shared Documents
」という名称になりますので、パスは下記のようになります。
Power Automate フロー作成手順
▲左側のメニューの中の作成をクリックして、自動化したクラウドフローをクリックします。
▲「新しいメールが届いたとき(v3)」トリガーを選択して、作成をクリックします。フロー名はお好きにつけてくださって大丈夫です。
▲「新しいメールが届いたとき」アクションのパラメータを入力します。
- フォルダ―:ターゲットとなるメールのフォルダを選択します。
- 宛先:宛先で条件を絞る場合に設定します。
- CC:CCで条件を絞る場合に設定します。
- ToまたはCC:ToまたはCCのどちらかで条件を絞る場合に設定します。
- 差出人:送信者のメールアドレスで条件を絞る場合に設定します。
- 添付ファイルを含める:「はい」を選択します。
- 件名フィルター:件名で条件を絞る場合に設定します。
- 添付ファイル付き:添付ファイル付きのメールのみをターゲットするか否かを設定します。今回は「はい」を選択します。
”添付ファイルを含める”と、”添付ファイル付きのみ”は、必ず「はい」を選択してください。
▲「変数」コネクタの中にある「変数を初期化する」アクションを追加します。
- 名前:任意の名前を付けます。私は
var
という名前にしました。 - 種類:文字列
- 値:(空白にします。)
▲「日時」コネクタの中にある「タイムゾーンの変換」アクションを追加します。
- 基準時間:「新しいメールが届いたとき」アクションの動的な値である「受信日時」を選択します。
- 書式設定文字列:「世界共通の並べ替えパターン」を選択します。お好きなものを選んで大丈夫です。
- 変換元のタイムゾーン:「(UTC)協定世界時」を選択してください。
- 変換先のタイムゾーン:「(UTC+09:00)大阪、札幌、東京」を選択してください。
メールの受信時刻でタイムスタンプを作成したいところですが、UTC(協定世界時刻)になってしまっているので、日本時間に変換しています。
書式設定文字列とタイムゾーンの変換については下記の記事でより詳細に解説していますので、もしよろしければご覧ください。
▲「データ操作」コネクタの中の「作成」アクションを追加します。
「作成」アクションでは、フォルダパスとなる文字列を作成します。(事前準備)のステップで作成した「添付ファイル保存フォルダ」の配下に ‘yyyy-MM-dd-HHmm’という形式でフォルダを作成したいので、そのように文字列を整形しています。
‘yyyy-MM-dd-HHmm’ の部分は、formatDateTime()関数を用いて、前のステップのアクションで変換した時間を入力値として作成しています。
添付ファイル保存フォルダ/@{formatDateTime(body('タイム_ゾーンの変換'),'yyyy-MM-dd-HHmm')}
例: メールの受信時刻が”2021年10月25日 13時15分00秒”の場合、下記のような文字列が作成されます。
> 添付ファイル保存フォルダ/2021-10-25-1315
「作成」アクションは、同じ値をフローの中で何度も参照する場面で、入力の手間を簡略化してメンテやフロー作成を効率的に行うためによく使います。今回作成するフローにおいては、ここで作成する値は次のアクションで一度参照するだけですのであってもなくてもどちらでも構わないのですが、今後のメンテのことを考えて一応使用しています。このアクションを省略する場合は、次のアクションのフォルダ―パスの入力値に、上のサンプルパラメータを直接入力してください。
▲「Sharepoint」コネクタの中にある「新しいフォルダを作成」アクションを追加します。
- サイトのアドレス:Sharepointサイトを選択します。
- 一覧またはライブラリ:ドキュメントを選択します。
- フォルダ―のパス:STEP5の「作成」アクションの動的コンテンツ(動的な値)である「出力」を選択します。
- ビューによる列の制限:空白にします。
ループにする理由は、添付ファイルは複数添付できるため添付ファイルは配列型の変数に格納されているためです。Apply to eachループアクションを使って添付ファイルの数だけ保存する、という処理にします。
▲組み込みカテゴリを選択して、コントロールコネクタをクリックします。
▲Apply to eachアクションを追加します。
▲Apply to eachの入力のテキストボックスをクリックしてアクティブにして、①「動的な値」アイコンをクリック、②新しいメールが届いたときアクションの「添付ファイル」という動的な値を挿入します。
▲Apply to eachの中の「アクションの追加」をクリックします。
▲Sharepointというキーワードで検索して、Sharepointコネクタを探してクリックします。
▲「ファイルの作成」アクションを追加します。
▲パラメータを入力します。
- サイトのアドレス:Sharepointサイトを選択します。
- フォルダ―のパス:「新しいフォルダの作成」アクションの動的コンテンツ(動的な値)である「完全パス」を選択します。
- ファイル名:「新しいメールが届いたとき」トリガーの動的コンテンツ(動的な値)である「添付ファイルの名前」を選択します。
- ファイルコンテンツ:「新しいメールが届いたとき」トリガーの動的コンテンツ(動的な値)である「添付ファイルコンテンツ」を選択します。
▲Sharepointコネクタの中の「ファイルのプロパティの取得」アクションを追加します。
- サイトのアドレス:Sharepointサイトを選択します。
- ライブラリ名:ドキュメントを選択します。
- ID:「ファイルの作成」アクションの動的コンテンツ(動的な値)であるItemIdを選択します。
@{outputs('ファイルの作成')?['body/ItemId']}
アダプティブカードの添付ファイル部分のContainer(下図の赤枠)部分のJSONを作成します。添付ファイルの数だけContainerを作成するのでループの中で追記していきます。
▲「変数」コネクタの中にある「文字列変数に追加」アクションを追加します。
- 名前:STEP3で作成した変数の名前を入力します。私は
var
と入力しました。 - 値:下記のようにJSONを入力しました。
{ "type": "ColumnSet", "columns": [ { "type": "Column", "width": "stretch", "items": [ { "type": "TextBlock", "text": "@{outputs('ファイルのプロパティの取得')?['body/{FilenameWithExtension}']}", "wrap": true, "horizontalAlignment": "Left" } ], "horizontalAlignment": "Center", "verticalContentAlignment": "Center" }, { "type": "Column", "width": "stretch", "items": [ { "type": "ActionSet", "actions": [ { "type": "Action.OpenUrl", "url": "@{outputs('ファイルのプロパティの取得')?['body/{Link}']}", "title": "open" } ], "horizontalAlignment": "Right" } ], "verticalContentAlignment": "Center" } ], "separator": true, "style": "emphasis" },
このアクションはループの外側に追加してください。
▲Teamsコネクタの中の「チャットやチャネルにアダプティブカードを投稿する」アクションを追加します。
- 投稿者:Flow bot/Userを選択します。
- 投稿先:Channel/User/Group chatを選択します。
- Teams:投稿先のチームを選択します。
- Channel:チャネルを選択します。
- Adaptive Card:アダプティブカードのJSONを入力します。
{ "type": "AdaptiveCard", "$schema": "http://adaptivecards.io/schemas/adaptive-card.json", "version": "1.3", "msTeams": { "width": "full" }, "body": [ { "type": "TextBlock", "size": "Medium", "weight": "Bolder", "text": "添付ファイル保存通知:" }, { "type": "ColumnSet", "columns": [ { "type": "Column", "items": [ { "type": "Image", "style": "Person", "url": "http://1.bp.blogspot.com/-65sRD3MXIlY/WLjrRdg1KUI/AAAAAAABCUc/X-VaDZ2CxII8qhhuD7kKnQnqB8ph9bLzwCLcB/s800/speed_slow_turtle_mail.png", "size": "Medium" } ], "width": "auto" }, { "type": "Column", "items": [ { "type": "TextBlock", "weight": "Bolder", "text": "@{triggerOutputs()?['body/from']}", "wrap": true }, { "type": "TextBlock", "spacing": "None", "text": "@{body('タイム_ゾーンの変換')}", "isSubtle": true, "wrap": true } ], "width": "stretch" } ] }, { "type": "Container", "items": [ { "type": "TextBlock", "text": "@{triggerOutputs()?['body/subject']}", "wrap": true, "size": "Large", "weight": "Default", "color": "Accent" }, { "type": "TextBlock", "wrap": true, "text": "@{triggerOutputs()?['body/bodyPreview']}" } ] }, @{variables('var')} { "type": "TextBlock", "text": "[> 保存フォルダを開く](@{outputs('新しいフォルダーの作成')?['body/{Link}']})", "wrap": true, "horizontalAlignment": "Right" } ] }
添付ファイルを上書きで更新する方法は?
▲ファイル名固定のまま上書き保存するバージョンも上の記事で作成しました。データソースとして参照されているファイル名を変えたくないファイルの更新に役立つかもです。
アダプティブカードの作成方法について
アダプティブカードの作成方法・デザイン方法については下記の記事で解説していますのでよろしければご覧ください。
論理条件でトリガーするには?
メールの件名をORやANDなどの論理条件でトリガーする方法については下記の記事で解説していますのでご覧ください。
まとめ
以上、メールの添付ファイルをSharepointに保存する方法について解説しました。
実際の運用では、Aに関連するプロジェクトはAのフォルダ、Bに関連するプロジェクトはBのフォルダというようにフォルダ分けした方が都合がよいので、フローをコピペしてトリガー条件とフォルダ名を変更したものをいくつか作成すると良いかと思います。フローのコピペ方法は下記の記事をご覧ください。