「Outlookからメールメッセージを取得します」で取得したメールメッセージはリスト形式、つまり全部ひとまとめになった状態で取得される上に、中身を表示することができません。
ここでは実践編としてFor eachを使用してメールを1件ずつ整理して、プロパティでタイトルと本文を取得してExcelに貼り付けたいと思います。
メールの取得
![pad outlook 振り分け1](https://sunagitsune.com/wp-content/uploads/2022/07/bac40982531ce5c55de43d5d9a939577.jpg)
テスト用にアカウント作って、いくつかメールを送っておきました。
![pad outlook 振り分け2](https://sunagitsune.com/wp-content/uploads/2022/07/1ae76dfb9f0068e6afbc7b51a2227fed.jpg)
Outlookからメールメッセージを取得しますでInboxフォルダのすべてのメールを取得し、メッセージボックスに表示してみると、
![pad outlook 振り分け3](https://sunagitsune.com/wp-content/uploads/2022/07/877858f21241e3ce7e6ff8d18d9450e2.jpg)
こうなります。取得したメールが全部いっしょくたになっており、かつ本文を読むことができません。
![pad outlook 振り分け4](https://sunagitsune.com/wp-content/uploads/2022/07/48afcc97fe9fd380ce5d64b642fe820b.jpg)
これをどうするかという話なのですが、まずOutlookからメールメッセージを取得しますで取得した変数(デフォルトではRetrievedEmails)を確認すると、リスト形式になっていることがわかります。
![pad outlook 振り分け5](https://sunagitsune.com/wp-content/uploads/2022/07/ce71b2fe89326af5045c9048e27b5982.jpg)
さらにリストの中のアイテムの詳細を確認すると、.Subjectプロパティでメールタイトル、.Bodyプロパティがメール本文に割り当てられているらしいことがわかります(参考)。
メールを1通ずつ取得
![pad outlook 振り分け6](https://sunagitsune.com/wp-content/uploads/2022/07/8afb8ffa8450b589e7fa3df6412b7343.jpg)
まずリストになった変数のそれぞれのアイテムを取得する方法ですが、For eachアクションの中にリストを入れると、リストの項目1つにつき1回ループしてくれます。
![pad outlook 振り分け7](https://sunagitsune.com/wp-content/uploads/2022/07/3a04871521777c92326eb5cd1257b422.jpg)
For eachの反復処理を行う値に取得した変数を指定します。
![pad outlook 振り分け8](https://sunagitsune.com/wp-content/uploads/2022/07/206e2e1cab3cee25e9bcfffd7441b84f.jpg)
試しにメッセージボックスでFor eachの変数を出力してみると、
![outlook 振り分け](https://sunagitsune.com/wp-content/uploads/2022/07/a00ed222ba2ddd931bfc49c37352b027.gif)
こんな感じで、1通ずつに分解されて処理されることが確認できます。処理は取得したメールの数だけ繰り返されます。
プロパティ(タイトルと本文)の取得
![pad outlook 振り分け9](https://sunagitsune.com/wp-content/uploads/2022/07/326b4f5c5ad5b318068d1fb50f86c63f.jpg)
取得したメールからプロパティの内容を取り出すには、変数の後に.プロパティ名をくっつけます。この場合.Subjectでタイトル、.Bodyで本文を取得します。
![pad outlook 振り分け10](https://sunagitsune.com/wp-content/uploads/2022/07/eb90f125a3b0fc476638f725da722079.jpg)
実行結果です。1通ずつタイトルと本文が取得された状態になりました。
他に.Dateで日付、.Fromで送信元のメールアドレス、.Toで送信先が取得できます。.Bcc、.Ccも取得可能。
Excelに貼り付け
![pad outlook 振り分け11](https://sunagitsune.com/wp-content/uploads/2022/07/e3e82d6da7ed540354e5c6bc0b873744.jpg)
ここから先は用途や各人の環境によって設定が異なると思うので、ひとつの例として。適宜改良してご利用ください。
まずExcelを起動し、
まずExcelを起動し、
![pad outlook 振り分け12](https://sunagitsune.com/wp-content/uploads/2022/07/0bf675136e0e37297c65c2d299a423e8.jpg)
ループカウント用に変数→変数の設定で初期値が1の変数を作って、
![pad outlook 振り分け13](https://sunagitsune.com/wp-content/uploads/2022/07/7e97dca3b72ea9107228b06498773458.jpg)
ループの終わりに変数の値を1増やします。
![pad outlook 振り分け14](https://sunagitsune.com/wp-content/uploads/2022/07/6b0c232781d65734d6565f8b9f07a64e.jpg)
Excelワークシートに書き込みを使って、1列目(変数)行目にタイトル、2列目(変数)行目に本文を書き込みます。
ループごとに取得しているメールはひとつだけなので、1行目には1通目、2行目には2通目のメールのタイトルと本文が記載されることになります。
ループごとに取得しているメールはひとつだけなので、1行目には1通目、2行目には2通目のメールのタイトルと本文が記載されることになります。
![pad outlook 振り分け15](https://sunagitsune.com/wp-content/uploads/2022/07/75da5210a714fca2d2c8c97fa6c0cf91.jpg)
実行結果です。ここまでのフローは下記をコピペすると再現できます(メアドなど要変更)。
Outlook.Launch Instance=> OutlookInstance
Outlook.RetrieveEmailMessages.RetrieveEmails Instance: OutlookInstance Account: $'''sunasunagitsune@hotmail.com''' MailFolder: $'''Inbox''' EmailsToRetrieve: Outlook.RetrieveMessagesMode.All MarkAsRead: True Messages=> RetrievedEmails
Excel.LaunchExcel.LaunchUnderExistingProcess Visible: True Instance=> ExcelInstance
SET NewVar TO 1
LOOP FOREACH CurrentItem IN RetrievedEmails
Excel.WriteToExcel.WriteCell Instance: ExcelInstance Value: CurrentItem.Subject Column: 1 Row: NewVar
Excel.WriteToExcel.WriteCell Instance: ExcelInstance Value: CurrentItem.Body Column: 2 Row: NewVar
Variables.IncreaseVariable Value: NewVar IncrementValue: 1
END
![](https://sunagitsune.com/wp-content/uploads/2021/11/machine-learning-g0b59793cc_1280-160x90.png)
Microsoft Power Automate Desktop(PAD)アクション、使い方一覧
Power Automate Desktopの使い方を機能・分類別に参照できるまとめです。
コメント