【Power Automate Desktop】Outlook内の受信メール一覧を取得する

Outlook

今回はPower Automate Desktopを使ったOutlookからの受信メールの取得方法について説明します。

この記事を読むと

  1. Outlook内の受信メール一式を取得する
  2. 受信メール一覧をExcelに出力する

ことができるようになります。

今回はOutlookの受信トレイからメールを取得した後エクセル(Outlookメール取得.xlsx)のB列からG列に張り付けるフローについて説明します。

これができればあとはExcel上で特定のメールについて一覧に表示するといったことが可能になるかと思います。

Power Automate Desktop全般について勉強したい方はこちらの書籍がお勧めです。動画も多く挙げられている株式会社ASAHI Accounting Robot研究所さんですが、一から丁寧に記載してくださっているので初心者の方でも安心です。

スポンサーリンク

■転記用Excelシートの準備

Excelにメール一覧を表示させる為、新規Excelを立ち上げて以下のような表を作成します。ここではOutlookメール取得.xlsxというファイル名でC:\Users\Publicフォルダに保存します。

参考ファイルはこちらをどうぞ。

■Power Automate Desktopでメール情報、メール本文を抽出するコード

特定の送信者を含むメールを受信トレイから取得しエクセルの各列に表示させる場合として以下のフローを作成しました(For EachのEnd部分が消えていますが存在しています)。一つずつ説明していきます。

I Outlookを起動します・・・「Outlook」の「Outlookを起動します」からOutlookを起動させます

「Outlookを起動します」の作成方法についての記事はこちら。

II Excelの起動・・・「Excel」の「Excelの起動」から準備したExcelファイルを起動します。

III Outlookからメールメッセージを取得します・・・「Outlook」の「Outlookからメールメッセージを取得します」を開いて以下の内容について記載します。

  1. Outlookインスタンス・・・Iで立ち上げたOutlookinstanceを選択します
  2. アカウント・・・Outlookは複数のアカウント(=ユーザー)を持つことが可能なため設定します。アカウント情報はOutlookの「ファイル」→「情報」の部分に記載されています。
  3. メールフォルダ・・・取得するフォルダ名を記載します。
    調べてみるとOutlookに表示されている実際のフォルダ名を記載するようなので「受信トレイ」「下書き」「送信済みアイテム」のように記載します。
  4. 取得・・・「すべてのメールメッセージ」「未読のメールメッセージのみ」「既読のメールメッセージ」から選択します。今回は「すべてのメールメッセージ」を選択します。
  5. ~を含む・・・「送信者」「宛先」「件名」「本文」に含まれるキーワードを記載します。ここでは「送信者」のところに特定のメールアドレスを記載します。
  6. 添付ファイル・・・「添付ファイルを保存します」「添付ファイルを保存しません」から選択します。ここでは「添付ファイルを保存をしません」を選択します。
    試してはいませんが添付ファイルの情報もまとめて取得するようです。

これらにより特定のメール情報を取得しRetrievedEmails変数として格納します。この変数には条件に合致したすべてのメールの情報が入るようになります。

IV 変数の設定・・・「変数」の「変数の設定」から設定します。今回は3行目から記載したいので最初の値=宛先を3に設定します。

V For Each・・・「ループ」の「For Each」から設定します。
「For Each」の作成方法についての記事はこちら。


今回は得られたRetrievedEmailsのそれぞれのItemに対して実行する為以下のように設定します。

結果として一つ一つのItemがCurrentItemとして取得されます。

ちなみに(実行した後でないと見れませんが)取得したCurrentItemの情報は以下のように確認できます。
変数のRetrievedEmailsをダブルクリック

得られたメール一覧が表示されるので「詳細表示」をクリック

以下のようにメールごとの詳細情報が表示されます。

なお左の.Attachment~がCurrentItemのプロパティになります。各メールから情報を抜き出す際必要となりますのでメモしておいてください。

VI Excelワークシートへの書き込み・・・「Excel」の「Excelワークシートへの書き込み」から設定します。

  1. Excelインスタンス・・・IIで立ち上げたExcelinstanceを選択します
  2. 書き込む値・・・変数としてはCurrentItemを指定します。
    なお各々のメールの中の「受信日時」「件名」「本文」などを取得するのはCurrentItemの後にプロパティ名を記載することで可能です。
    ただ今回はなぜか.Toや.Fromでは取得できなかった(Power Automate Desktopの問題?)ので可能だった.Date .Cc .Subject .Bodyのみを取得するようにしました。
  3. 書き込みモード・・・今回は指定したセルを選択します。
  4. 列・・・B列からG列にそれぞれ転記するので列番号を記載します。ここでは列番号を数字(A=1 B=2)で示していますがBなどのアルファベットのままでも可能です。
  5. 行・・・3行目から記載していくため先ほど設定したNewVarを選択します。

VII 変数を大きくする・・・「変数」の「変数を大きくする」から設定します。行数を増やしていく必要があるので1ずつ大きくします。

結果として最初に示した入力ダイアログ、メッセージを表示させることができます。

■ここでのまとめ

Power Automate Desktopでは「Outlookからメールメッセージを取得します」から特定のメール一覧の取得ができます。
ちなみに私は(VBAでですが)毎月月末に送信済みアイテム一覧を取得してその月の報告に利用したりしています。キーワード指定もできるので「A社向けに送った内容」などでまとめることも可能かと思います。

Power Automate Desktop全般について勉強したい方はこちらの書籍がお勧めです。動画も多く挙げられている株式会社ASAHI Accounting Robot研究所さんですが、一から丁寧に記載してくださっているので初心者の方でも安心です。


コメント

  1. 新 鉱三 より:

    初めてコメントいたします。
    Power Automate Desktop初心者で、5月から始めました。
    非エンジニアなのでご容赦ください。

    やりたいことは「職歴が長い先輩のメールフォルダについて、日付を指定し、
    その期間の間でのメールを取得してExcelに貼り付ける」というフローでした。
    私の職歴は半年程度で、作った感じだとうまくいきました。

    が、先輩のPCで実行してみたところ、うまくいきません。
    3年分程度抽出してみたいんですが、「2018/1/1」から「2021/8/3(今日)」などと
    日付を指定しても、今日から1年前の日付、
    つまり「2020/8/4」から「2021/8/3」までしか抽出できませんでした。

    実行する日・人を変えて挑戦しても、日付を1年より長く設定しても、
    「1年前の今日の翌日」から「今日」が対象になってしまいます。

    これは、Power Automate Desktop内で、
    メールの検索時点で1年分しか取得しないような仕様があるのでしょうか?
    例えば、抽出の負荷を減らすために?

    理由らしい理由がわからず困っています。
    初心者・ほぼプログラム未経験者なので、分かりやすくお教えいただけると幸いです。
    よろしくお願いいたします。

  2. 新 鉱三 より:

    追記:
    ならば、と「2019/8/4」から「2020/8/3」までと指定すると、何も抽出できません。

    • blue より:

      お世話になります。

      表記件PADではなくOutlookの設定のように思われます。

      「ファイル」→「アカウント設定」→「アカウント設定」→自分のメールアドレスをダブルクリック

      Exchangeキャッシュモードの設定がおそらく1年になっているので「すべて」にしてください。
      Outlookを一度再起動して一定時間放置しておくと昔のメールも取得できるようになると思います。

      なおExchangeキャッシュモードはオフラインでの保存に関するもので初期設定では1年以上はオフラインでは保存されなくなります。
      (1年以上前のものはあくまでオンライン上のデータを取得しているだけでローカルには保存されていません)
      その為Itemを取得しようとしても1年以上は取得できません。

      なお全取得までには時間はかかります。当方でも同様の事象が見られたので試しましたがすぐには取得できなかったので
      時間を空けてから試されたほうが良いと思います。

      取得できればいいですね。

タイトルとURLをコピーしました