Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
Help us understand the problem. What is going on with this article?

Power Automateを用いてOneDriveへのリンクを含んだメールを一斉送信する方法

0.はじめに

この記事では,クラウドに保存されたファイルへのリンクを含むメールを一斉に送りたい,という状況を想定しています.ファイルも送り先ごとに違うような場合,ファイルごとにリンクを生成してメールの本文に貼り付ける,という作業は,メール件数が増えると煩雑です.これを,Microsoft Power Automateで片付けよう,というのがこの記事の趣旨です.

1.Excelファイルとリンクを送りたいファイルをクラウド上に保存します

1.0 Excelファイルを用意します

まず,メールを送りたい送り先一覧を記したテーブルを含むExcelファイルをOneDriveかSharePoint上に用意します.ID,Name,Email,Statusの列を用意しています.複数名に一緒に送りたい場合は,1行にまとめておきます.(この例だと,IDが2である行は,2人一緒にまとめて送信する,ということです.)Statusの列は,既に送信済みである場合にSentと記録するために用意しました.
excel_to_outlook_2_1.png

1.1送りたいファイルをOneDriveかSharePointに保存します

このとき,IDと紐付いた通し番号を含むファイル名をつけておきます.

excel_to_outlook_2_5.png

2.Power Automateでフローを実行する

2.0フローの全体像

大まかなの流れとしては,手動でトリガーし,Excelファイルの情報を取得し,各行ごとに,行ID番号と紐付いたOneDrive上のファイルへのリンクを取得し,Outlookからメールを送る,というものです.

2.1手動でフローをトリガーします

空白から開始(Create from blank)でインスタントクラウドフローを選択して,フローの作成を始めます.
トリガーとしては,手動でフローをトリガーします(Manually trigger a flow)を選択します.
excel_to_outlook_2_19.png

2.2 変数を初期化します

送り先の名前に様などの敬称をつける,という連結操作(concat)に用いる変数を最初に宣言しておきます.
コネクタは組み込み(Built-in)にある変数(Variables)を選択し,アクションとして変数の初期化(Initialize variable)を選びます.文字列の結合のために用いるので,種類(Type)は文字列(string)を選択します.
excel_to_outlook_2_4.png
あとで,変数を宣言しようとすると,The operation 'Initialize variable' can only be used at top level.とエラーが出てしまうので,初めの段階で変数の初期化を行っておきます.

2.3 Excelで表内に存在する行一覧を表示する

コネクタのExcelを選択し,List rows present in a tableを選択します.
excel_to_outook_2_7.png

詳細オプションにFilter Queryという項目があるので,Status ne 'Sent'と記載します.neは'not equal'の略ですね.こうすることで,Status列がSentでない行だけ一覧として取得されます.
記事「Power Automateを使ってMicrosoft Teamsにメンバーを一括登録する方法」において,既に追加済みのメンバーをaddedと記録していたのと,同じやり方です.
Google Apps Script(GAS)のTutorial: Sending emails from a Spreadsheetのチュートリアル記事の中で,emailSentという列を設けて,重複送信を避ける,という説明があります.本記事のこのステップは,GAS×Spreadsheetの代わりにPower Automate×Excelでも同様なことを行ってみた,ということになります.

2.4 取得した各業に対して一連の操作を行う

次に,アクションを追加し,組み込みのコネクタのControlを選択し,Apply to eachを選びます.以前の手順から出力を選択という項目は,動的コンテンツ一覧に表示されるExcelのvalueを選択します.つまり,ステップ2.3で取得されたStatusがSentでない各行に対して,以下のアクションを行う,ということです.
excel_to_outlook_2_9.png

2.4.0 OneDriveで共有用のリンクを生成する

コネクタとしてOneDrive(またはSharePoint)を選択し,共有用のリンクを生成します.リンクを生成するには,「共有リンクの作成」と「パスによる共有リンクの作成」の2種類がありますが,ここでは,パスによる共有リンクの作成を用います.
excel_to_outlook_2_16.png
リンクの種類は,View(閲覧専用),Edit(編集可能),Direct(ダウンロード用)から選択できます.リンクスコープはAnonymous(リンクを知っているすべてのユーザー, Anyone with the link)かOrganization(リンクを知っている組織内のユーザー, People in the organization with the link)を選択することができます.

2.4.1本文中の宛名用に名前に「様」と読点(コンマ)を連結する

このステップは,Excelテーブル内の名前に,様とコンマを追加して,「〜様,〜様」とメール本文に記入するためのステップです.今回は,Power Automateの機能を活用してみたくて,このように書きましたが,Excel関数のCONCAT()を使って,Excelテーブル内に,様付きの名前の列を用意しておいて,メールに読み込む方が,楽なのでは,と思います.
excel_to_outlook_2_10.png

2.4.1.0変数の設定

まず,Set variableで変数を設定します.Nameという変数にダイナミックコンテンツのExcelテーブル当該行のName_1という値を設定します.
excel_to_outlook_2_11.png

2.4.1.1文字列の連結

次に,今設定した変数と,文字列の"様"を式concatを用いて連結(concatenate)します.コネクタは組み込み(Built-in)のデータ操作(Data Opereation)を選択し,アクションは作成(compose)を用います.
excel_to_outlook_2_12.png
コードのプレビューを見ると,以下のようになっています.コードのプレビューは3点リーダーをタップすると,選択肢に表示される,そこから確認できます.
excel_to_outlook_2_14.png

excel_to_outlook_2_13.png

2.4.1.2複数送り先がある場合

1行に送り先が2人いる場合は,2人目の名前にも様をつけます.Conditionはいいいえで分岐させ,ダイナミックコンテンツのName_2null(空白)に等しくないときは,Name_2と様を連結させ,nullに等しい場合は,何もしません.

2.4.3Outlookでメールを送信する

OutlookのSend an email(V2)を用いて,メールを送信します.宛先は,ダイナミックコンテンツのEmail_1およびEmail_2を,セミコロンで区切って並べておきます.本文Bodyですが,名前と様を連結して得られたOutputsを利用します.OneDriveのファイルへのリンクも挿入しておきます.
excel_to_outlook_2_15.png

3.フローを実行する

フローを保存したら,手動でトリガーしてテストしてみます.問題なくフローが実行されました.
excel_to_outlook_2_17.png

受信ボックスを見ると,OneDrive内のファイルへのリンクが挿入されたメールが届いていました.
excel_to_outlook_2_18.png

4.最後に

複数の方に,異なるファイルへのリンクをメールで送りたかったので,このフローを作成しました.Power Automateに慣れたいということで,「様」を付けるのもPower Automate内でやってみましたが,実用上はその部分はExcel内でやった方が早いと思います.

anak
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away