本記事では「Microsoft Power Automate Desktop」(以下、Power Automate)でOutlookにおける特定メールフォルダにあるメールをPDF化するとともに、改名させて保存を自動化する方法をおおまかにご説明します。
前提条件
- Power Automate Desktopのインストールされていること
- OutlookがPCにインストールされていること
- PDF化したいメールがOutlookの受信トレイや特定のフォルダーに存在していること
- PCにPDF出力先フォルダーが作成されていること
制限事項
- PDF化された後のファイル名は「YYYY年MM月DD日X曜日hhmm」形式となる
- メールフォルダ内の受信時間が分単位で一致するメールは改名されない
- UI自動操作を含むため、フロー起動中はPCを利用する事が出来ない
なお、本記事では無料コネクタのみを使用しています。有料のプレミアムコネクタの使用などにより、より効率化出来るところがある可能性があります。
特定メールフォルダにあるメールをPDF化するとともに改名して保存を自動化する方法
以下手順について、既に作成したフローを元に一つ一つ説明しています。
そのため、スクリーンショット上では新規作成として表示されておらず、既に値が入っていますが、ご留意ください。
Power Automate Desktopで新規フローを作成する
1. Power Automateを起動し、「新しいフロー」をクリックします。
2. フロー名を「OutlookメールPDF出力」などわかりやすい名前に設定し、「作成」を押します。今回は「特定メールフォルダにあるすべてのメールをPDF化する。」としました。
カスタムフォームの表示
3. アクションの「メッセージボックス」より「カスタムフォームを表示」を選択してフローに追加します。
4. 「カスタムフォームデザイナー」を使用して、Outlook接続に必要なメールアドレス(ID:userID)やメールフォルダパス(ID:mailpath)、PDF出力先パス(ID:PDFoutput)のフォームを作成し、変数に格納します。
※ ラベルはお好みで付けてください。
また、入力および送信が出来るボタン(ID:Submit)を作成して「完了」をクリックします。
Outlookメールの取得
5. アクションの「Outlook」より「 Outlookを起動します」をフローに追加します。値は既定値です。
6. アクションの「Outlook」より「 Outlookからメールメッセージを取得」をフローに追加します。
7. 「 Outlookからメールメッセージを取得」では、先ほどカスタムフォームで作成した変数である「userID」をアカウントで指定、「mailpath」をメールフォルダで指定して保存します。
※ 未読・既読のメールのみを目的とするのであれば取得で調整します
※ 本アクション実施後に既読としてマークしない場合は、「既読としてマークします」のチェックを外します
メールのフィルタリング
8. 対象のメールが存在しない場合はフローを停止させる、という処理をIf条件で行います。アクションの「条件」より「If」をフローに追加します。
9. If条件ではメッセージ取得後に作成された変数を最初のオペランドで指定し、演算子は「空である」を選択して保存します。
10. IfとEndの間にアクションの「フローコントロール」より「フローを停止する」を追加します。値は既定値です。
一時的にメールを保存する
11. 取得したメールをmsgファイルとして一時保存します。アクションの「Outlook」より「Outlookメールメッセージを保存」を追加します。
12.「Outlookメールメッセージを保存」では、アカウントに「userID」を、「保存するメールメッセージ」は先ほど取得したメールデータを指定し、「保存形式」は.msgを選択します。
13. メールの取得と保存が完了すればOutlookは必要ないので、アクションより「Outlookを閉じます」を追加します。
また念のためですが、この後PDF出力を"Microsoft Print to PDF"で行うので、「既定のプリンターを設定」のアクションで"Microsoft Print to PDF"を選択しておきます。
※ 後ほどプリンターの選択は別途で行いますが、既定で設定しておくことで他プリンターで印刷されることを防ぐことができます。任意で設定します。
メールファイルをPDF化する
14. アクションの「ループ」処理より「For each」を追加し、取得したすべてのメールファイルを各ファイルごとに処理するように設定します。
15. アクションの「システム」より「アプリケーションの実行」を追加します。
16. 「アプリケーションの実行」では、各ファイルを実行するようにアプリケーションパスにFor eachで取得した変数を入れます。
メールファイルをPDF化する[UI要素の抽出]
17. 今回、PDF化をUI操作で実施するので、各UI要素を抽出する必要があります。
抽出には「ツール」にある「UI要素を調査する」を選択して出てくる「UI要素ピッカー」を利用します。
18. Outlookよりテストのmsgファイルを手動作成し、印刷より"Microsoft Print to PDF"で印刷していく手順で必要な要素をピックして保存していきます。以下の画像を参考にしてピックします。
※ 印刷でファイル名を入力する設定も忘れずに行います
19. ここで親要素の属性でName属性のチェックを外して、対象がピックアップした一意のファイルのみを対象としないようにします。
メールファイルをPDF化する[アクションの追加]
20. アクションの「UIオートメーション」より「ウィンドウコンテンツを待機」をFor eachの中に追加します。
21. 「ウィンドウコンテンツを待機」では、UI要素の「ファイル」タブをのボタンを選択してそのボタンが出るまで待機します。
22. アクションの「UIオートメーション」より「ウィンドウのUI要素をクリック」を2つ追加し、それぞれUI要素の「ファイル」タブのボタンと「印刷」ボタンを選択します。
23. アクションの「UIオートメーション」より「ウィンドウでドロップダウンリストを設定する」を追加します。
24. 「ウィンドウでドロップダウンリストを設定する」では、ドロップダウンリストに「プリンター」選択ボタンを追加し、オプション名を"Microsoft Print to PDF"とします。
※既定のプリンターのフローで既に選択しているため、このアクションを入れずに進めても問題ないはずですが、念のため追加しています。
25. アクションの「UIオートメーション」より「ウィンドウのUI要素をクリック」と「ウィンドウコンテンツを待機」を追加します。
「ウィンドウのUI要素をクリック」では、「印刷」ボタンを選択します。
26. 「ウィンドウコンテンツを待機」では、UI要素に印刷の「ファイル名」を入力する要素を選択します。
27. アクションの「UIオートメーション」より「ウィンドウ内のテキストフィールドに入力する」を追加します。
28. 「ウィンドウ内のテキストフィールドに入力する」では、「テキストボックス」に印刷「ファイル名」のテキストボックスを指定し、入力するテキストにPDF出力パス変数と「\」、重複しない変数に「.pdf」を付けたものを入力します。
※ 今回は、重複しない変数としてプロセスIDを利用しています。
29. アクションの「UIオートメーション」より「ウィンドウのUI要素をクリック」を追加し、「保存」ボタンを選択します。
30. アクションの「ファイル」より「ファイルを待機します」を追加します。
31. 「ファイルを待機します」では、ファイルパス「PDF出力パス変数\PDF名変数.pdf」が作成済みのかどうかを確認するように設定します。
32. 作成済みを確認したら、必要に応じて時間待機を追加して.msgファイルを開いていたプロセスに対して、アクションの「システム」より「プロセスを終了する」&「プロセスを待機する」を追加します。
※ 時間待機はおおよそ0.5~1秒あれば良いですが、PCのスペックによるので順次テストしながら調整します。
33. 「プロセスを終了する」では、「プロセスID」を指定して「プロセスID」に変数を記入します。
34. 「プロセスを待機する」では、「プロセス名」に変数を記入し、待機目的に「停止」を入力します。
35. For eachの最後では、アクションの「ファイル」より「ファイルの削除」を追加し、For eachで生成した各ファイルの変数を対象として設定します。
PDFの情報よりPDFファイル名を変更する
今回は、"Microsoft Print to PDF"でOutlookメールをPDF化した際にPDFファイルの上部に表示される、以下の"送信日時"より日時を取得します。
36. アクションの「フォルダー」より「フォルダー内のファイルを取得」を追加します。
37. 「フォルダー内のファイルを取得」では、「フォルダー」にPDF出力パス変数を記入します。
38. アクションの「ループ処理」より「For each」を追加し、取得したフォルダーのファイルを各ファイルごとに処理するように設定します。
39. ループ処理の中にアクションの「PDF」より「PDFからテキストを抽出」を追加します。
40. 「PDFからテキストを抽出」では、「PDFファイル」に各ファイルの変数を入力し、対象のページは1ページ目とします。
41. アクションの「テキスト」より「テキストのトリミング」を追加します。
42. 「テキストのトリミング」では、先ほど抽出したテキストの変数を元のテキストに入力し、モードを「指定された2つのフラグの間にあるテキストを取得する」を選択します。また、開始フラグは「送信日時:」、終了フラグは「宛先」とします。
43. トリミングしたデータ(日時)には空白や記号が含まれるので、それらを置換します。アクションの「テキスト」より「テキストを置換する」を2つ追加します。
44. 一つ目の「テキストを置換する」では、「解析するテキスト」をトリミングしたデータ(日時)の変数を入力し、「検索するテキスト」に「%' '%」を、「置き換え先のテキスト」に「%''%」を入力します。
※ テキストで空白を指定する際は、アポストロフィーで囲む必要があります。
45. 二つ目の「テキストを置換する」では、一つ目のトリミング後の変数を入力し、「検索するテキスト」に「%':'%」を、「置き換え先のテキスト」に「%''%」を入力します。
46. トリミングを行い、2回の置換を行った後のテキストですが、まだ段落が入っています。そちらも取り除くために、アクションの「テキスト」より二つ目の「テキストのトリミング」を追加します。
47. 二つ目の「テキストのトリミング」では、2回の置換後のテキストの変数を「トリミングするテキスト」に入力し、モードには「先頭と末尾の空白文字」を選択します。
48. 最後に、アクションの「ファイル」より「ファイルの名前を変更する」を追加します。
49. 「ファイルの名前を変更する」では、「名前を変更するファイル」にループ処理の各ファイルの変数を記入します。「名前の変更の方法」は「新しい名前を設定する」を選択し、「新しいファイル名」にトリミングしたテキストの変数を入力します。また、「拡張子を保持する」にチェックを入れて、PDFファイルである状態を保持します。
全体像
非常に長いフローになりましたので、以下に全体のフローを上から順に貼ります。
終わりに
初めてMicrosoft Power Automate Desktopを使ってフローを作成する挑戦をし、多くの学びがありました。
このフローを通じて、基本的な操作やさまざまなアクションの組み合わせ方を理解することができました。
また、今回紹介したフローにはさらに効率化の余地があることを実感しました。特に、Power Automateのクラウド版と融合させることで、UI操作を省略し、よりシームレスな自動化が可能になると感じました。
今後も、フローの作成に取り組み、さらなる自動化の可能性を探っていきたいと思います。
岩永 岳浩(日本ビジネスシステムズ株式会社)
金融保険本部に所属しています。 主に認証基盤(Microsoft Entra ID、Active Directory)に強く、AWS、Jiraも少し経験あります。
担当記事一覧