見出し画像

フォルダにファイルを保存すると、そのファイルを添付してメール送信するフローをPowerAutomateで作ってみた!

こんにちは(^^)/
アイシーティーリンク株式会社の三好です。
「PowerAutomateを活用して楽しようぜシリーズ!」今回のネタは!
OneDrive上のフォルダにファイルが保存されたら、そのファイルを添付して自動送信するフローをご紹介しようと思います( ̄▽ ̄)V

今回のネタも色々と転用が出来ると思うので、是非最後までお付き合いください v(^^)v
また、私の担当ブログはあくまでも初心者向けです。
そんなこと細かく書かなくても判ってるよ(*'へ'*)!
というような事もしつこく!?説明していくのであしからず(笑)



動作条件

  • メールに添付するファイルは1通につき1点のみであること

  • ファイル名称は命名規則に沿っていること

動作内容

  • 指定したフォルダ(添付してメールフォルダ)にファイルを保存するとそのファイルを添付してファイル名に記載されたユーザーアカウントからユーザー情報を取得してメールに添付して送信します。

  • 添付ファイルをまとめて保存すれば、その数だけメールを送信することができます。
    ※500件とか一気に入れてしまうと、動作はしますがメールサーバーなどに大きな負荷がかかり弊害が発生する可能性があるので小分けにして入れるのがおすすめです。

事前準備

フォルダの準備

今回の構成はトリガーとなるフォルダと送信後に移動させるフォルダの二つで以下の様に構成します。
"OneDrive" > "自分のファイル" 配下に"PAtest"というフォルダを作成し
その中にサブフォルダとして以下の2フォルダを作成します。
 ①トリガーとなるフォルダを「添付してメールフォルダ」
 ②送信後に移動させるフォルダを「メール送信済みファイル」

色を変えることでPowerAutomateで連携されているフォルダであることを明示します

また、フォルダを緑色に変えているのはPowerAutomateから連携されているフォルダだという事を、自分(社内)のルールとして周知し、リネームや移動・削除などでエラーにならないようにするためのテクニックです。

ファイルの準備(命名規則)

ファイル名からユーザー情報(名前とかメールアドレスとか)を取得させるため、ファイルの命名規則を次のように指定します。
「メールアカウント_ファイル名」
ファイルがトリガーとなるフォルダ(今回は"添付してメールフォルダ")に保存されたら、PowerAutomateが動き出し、ファイル名のアンダースコアの前の文字列を抽出してユーザー情報を取得するという流れを想定しています。※なのでメールアカウントの後ろには必ずアンダースコアを付ける必要があります。
ユーザー情報を取得することができるのは、UPNでも可能なのでUPNのアカウント部分をファイル名に付けるルールでも問題ありません。
今回は「メールアカウント_総会のお知らせ」というタイトルでエクセルファイルを作成しました。
※メールアカウントはメールアドレスの"@"アットマークより前の部分です

PowerAutomateの作成

トリガーとなるフォルダを指定

ファイルとフォルダの準備ができましたら、PowerAutomateでフローを作成していきます。

+作成 > 自動化したクラウドフロー

フロー名に任意の名称をつける
(今回は"【TEST】ファイルを添付してメール送信")
フローのトリガーはOneDriveの「ファイルが作成されたとき」を選択します

【注意事項】
※この時OneDriveの種類に注意が必要です。
「OneDrive」と「OneDrive for Busines」の2種類があるのでご自身がどちらのアカウントを持っているかで選択してください。

今回は会社のアカウントなので「OneDrive for Busines」を選択し「作成」

「接続が無効です・・・」と赤文字が表示されたら、クリックして詳細を開きます。

表示された詳細の下に表示されている"Change connection"をクリックして自分のアカウントを選択して認証させます。

この時、本来であれば自分のアカウントが表示され、選択するだけの状態になりますが、自分のアカウントが表示されず、「サインイン」の画面になってしまい、自分のアカウント(メールアドレス)を入力しても下図のような「Microsoftアカウントが存在しません」となってしまう場合は、「OneDrive」と「OneDrive for Busines」の選択を間違えている可能性があります。
※Microsoftアカウントが存在している前提です

無事に認証されると、下図のように自分のアカウント(メールアドレス)が表示され、「接続しました」となっていれば"成功"です。
接続されたら、フォルダーの選択(フォルダーアイコン)をクリックしピッカーを表示します。

OneDrive上に準備したフォルダ(添付してメールフォルダ)を"ピッカー"で辿っていき、選択します。

下図のように表示されればOKです。

続いてフォルダ内に入っているファイルの一覧を取得します。
次のアクションを追加するには、
「+」ボタン > 「アクションの追加」

検索欄に"OneDrive"と入力し、"OneDrive for Business"の"フォルダー内のファイルリスト"を選択します。
※"フォルダー内のファイルリスト"が見つからない場合は、"さらに表示"をクリックしてください。

ファイル名の取得

"Open folder"をクリックしてOneDrive上に準備したフォルダ(添付してメールフォルダ)を"ピッカー"で辿っていき選択します。

ファイル名からアカウントを取得

次のアクションは、ファイル名からアカウント部分のみを抜き出します。
◆関数を使用して以下の手順で文字列を操作します。
 ①アンダースコア位置が何文字目にあるか判定
 ②ファイル名の左0文字目からアンダースコアの位置までを判定

まずは、①アンダースコア位置が何文字目にあるか判定します。
アクションの追加で、作成を選択します

+ボタン > アクションの追加 > ランタイムの追加で"組み込み"を選択
"Data Operation" > "作成"

"作成"が表示されたら、この後の作業で判りやすくするためにアクションの名前(作成)をリネームします。"作成"の部分をクリックするとカーソルが入るので、リネームしてください。今回は"アンダースコアの位置"とします。

アクション名のリネーム
アクション名のリネーム

続いて、関数を作成します。
入力欄にカーソルを入れ、右側の"fx"マークをクリック

関数を入力しますが、今回使用するのはアンダースコア "_" の位置が何文字目にあるかを判断するため関数で"indexof"を使用します。
この関数はカンマで区切られて2つの値を入力します。
indexof(ファイル名,'検索したい文字')
 ファイル名・・・動的なファイル名
 検索したい文字・・・_
 ※検索したい文字はシングルクォーテーションで囲む必要があります。

実際に入力していきましょう。
下図の位置に、indexof() と入力し、カッコの中にカーソルを入れ、
"動的なコンテンツ"を選択します。

項目「フォルダー内のファイルの… 」の中にある"名前"を選択します。

続いて、IMEを直接入力にして、カンマを入力
続いてシングルクォーテーション、アンダースコア、シングルクォーテーションを入力します。

黄色ハイライトが動的ファイル名、緑色ハイライトが検索したい文字

入力が終わったら、「Add」をクリックします

続いて次のアクションで先ほどと同様に
+ボタン > アクションの追加 > ランタイムの追加で"組み込み"を選択して
"Data Operation" > "作成"

今度はファイル名からアカウント部分を取り出す関数です
使用する関数は substring() を使用します
substring(ファイル名,開始位置.終了位置)
 ファイル名・・・動的なファイル名
 開始位置・・・0文字目
 終了位置・・・アンダースコアの位置(何文字目か)

先ほどと同様に関数を入力し、カッコの中で
"動的なコンテンツ" > ファイルの"名前" を選択します。

続いて、IMEを直接入力にして、カンマ、ゼロ、カンマと入力します。

次に、先ほど作成した"アンダースコアの位置"の"出力"を動的コンテンツで挿入し、「Add」で完了します。

黄色ハイライトが、動的ファイル名
緑色ハイライトが、開始位置
青色ハイライトが、アンダースコアの位置

次にこの後のアクションで判別しやすくするために
"作成" > "アカウント部分を抽出" にリネームします。

取得したアカウントからユーザー情報を取得

次に、抽出したアカウント部分をユーザー情報取得に使用します。
+ボタン > アクションの追加 > "検索"で"user"と入力し
"Office 365 users" > "さらに表示" を選択します。

"ユーザープロフィールの取得(V2)"を選択

ユーザー(UPN)の項目に先ほど作成した関数の出力値を動的コンテンツから入力します。

カーソルを入れると右側に"稲妻マーク"と"fxマーク"が出ますので
"稲妻マーク"をクリックして動的コンテンツウィンドウを表示します。

右側に表示される動的コンテンツウィンドウの中から先ほど作成した
"アカウント部分を抽出"の"出力"を選択

このままでは、アカウント部分しか入力されていないため、続けてドメイン部分をテキストで入力します。今回は、"@ictlink.jp" と入力しています。

ファイルを添付してメール送信設定

次のアクションはいよいよファイルをメールに添付します。
+ボタン > アクションの追加 > "検索"で"onedrive"と入力し
"OneDrive for Business" > "さらに表示" を選択します。

"ファイルコンテンツの取得"を選択します

"ファイル"にカーソルをいれて動的コンテンツ(稲妻マーク)を選択し
"フォルダー内ファイルの…"項目の"ID"を選択します
このアクションはこれだけです。

続いて、次のアクション
+ボタン > アクションの追加 > "検索"で"Outlook"と入力し
"Office 365 Outlook" > "さらに表示" > "メールの送信(V2)"を選択。

【注意事項】
※この時"メールの送信"の種類に注意が必要です。
「メールの送信(V2)」と「共有メールボックスからメールを送信する(V2)」の2種類があるので、どちらのメールを使用するのかで選択する。
※"共有メールボックス"で送信する場合は、PowerAutomateを作成しているアカウントがその共有メールボックスにアクセス権がないと使用できませんのでご注意ください。

自分のメールから送信する場合はこちら
共有メールボックスのメールから送信する場合はこちら

今回は、自分のメールから送信するので、「メールの送信(V2)」を選択します。
"宛先"の右側にあるプルダウンを選択 > "カスタム値の入力" > 動的コンテンツ(稲妻マーク)を選択します。

宛先は、ファイル名に記載されたユーザーに送信したいので、先ほど作成した、"ユーザープロフィールの取得(V2)"で取得したユーザー情報の中からメールアドレスを取得します。
"メール"が見当たらない場合は"表示数を増やす"をクリックします。

※ちなみに、宛先に"ユーザープロフィールの取得"で
使用した時と同じように入力しても構いません。

次にメール本文ですが、ここは任意の内容で構いませんが、
せっかく"ユーザープロフィールの取得"をしているので
本文内には送り先のユーザーの名前を動的に入力したいと思います。

本文にカーソルを入れ、動的コンテンツメニューの中から
"ユーザープロフィールの取得(V2)" > "表示名" を選択

あとは、文章をテキストで入力して本文を完成させ、次はファイルを添付するので、右下にある"すべてを表示"をクリックします。

するとメニューがさらに表示されますので、"添付ファイル"項目で
「+Add new item」をクリック

"添付ファイル名"で動的コンテンツ"フォルダー内のファイルの…"項目から
"名前"を選択

"添付ファイルの内容"で動的コンテンツ"ファイルコンテンツの取得"項目から"ファイルコンテンツ"を選択

一番下に自分のアカウントが正常に接続されていることを確認します。

送信したファイルを送信済みフォルダへ移動設定

いよいよ最後のアクションです
添付してメール送信されたあと、その添付ファイルを、トリガーとなるフォルダ「添付してメールフォルダ」から「メール送信済みファイル」へ移動させます。

+ボタン > アクションの追加 > "検索"で"onedrive"と入力し
"OneDrive for Business" > "さらに表示" > ”ファイルの移動または名前変更”
を選択。

"ファイル"項目には、稲妻マークから動的コンテンツで"フォルダー内ファイルの…"項目の"ID"を選択します

続いて、



続いて"対象ファイルのパス"こうもに移動させたいファイルパスを入力しますが、ここはなぜかピッカーがないので、パスを手入力するか、"フォルダー内のファイルリスト"で入力したパスをコピーしてフォルダ名のところをリネームするかして入力します。

ここはフォルダパスではなくファイルのパスなので、移動させたいファイル名まで入力する必要があるので、フォルダパスの後ろにスラッシュ"/"を入れて、動的コンテンツでファイルの名前を選択します。
"フォルダー内のファイルの…" > "名前"

ご自身の環境に合わせて、こんな感じに入力されてればOK

完成

これでようやく完成です!
右上にある"保存"を押してグリーンの帯で、
"フローを開始する準備が出来ました。テストすることをお勧めします。"と書いてあればとりあえず正常に作成できています。

フロー全体ではこんな感じ

テスト

テストしてみましょう。
命名規則にそって名前を付けたエクセルファイルをトリガーとなるフォルダ(添付してメールフォルダ)にドラッグ&ドロップなどで保存します。

するとすぐにPowerAutomateが動作し、"添付してメールフォルダ"の中からファイルがなくなりました。
※1つのファイルでネットワークやM365に障害が起きていない限り3~4秒で実行されます。3~4秒経ってもファイルがなくならない場合はブラウザのリフレッシュ(Crtl+F5)をしてみてください。

送信後に移動させるフォルダ(メール送信済みファイル)を見てみるとファイルが移動されていることが確認できます。

メールもちゃんと添付ファイルが付いて受信できていますね。

この記事が気に入ったらサポートをしてみませんか?