Outlookで受信したメールを操作してエクセルに転記する

  • このエントリーをはてなブックマークに追加
  • Pocket
  • LINEで送る
Outlookメールを取得して自動でエクセルに転記する

今回はOutLookで受信したメールを操作してみます。

Outlookメールを受信するためのアクティビティ「Get outlook mail messages」には多くのプロパティがあり、またListという特殊な変数の型にデータが格納されるため分かりづらい部分があります。

業務において利用率が高いOutlookですのでここで紹介したいと思います。事前に拡張アクティビティの「UiPath.mail.Activity」をインストールしておいてください。メール送信については、「Outlookからメール送信してみる。」の記事を参照してください。

受信メールを取得する

本ページ下部でプロパティの詳細やListの使い方は説明しますが、まずはメールの内容を読み取りメッセージボックスに表示する処理を行ってみます。

メールを取得する

アクティビティを使用してOutlookからメールを取得する

シーケンス上に「Get outlook mail messages」アクティビティを配置します。
アクティビティ自体はシンプルなただの箱ですがプロパティが複数あります。まずはメール受信処理を行うための必須プロパティである次の箇所を埋めます。

GetOutlookMailMessageのプロパティ

Account(アカウント)

Outlookに設定されているアカウントを設定します。(例:”xxx@yyyy.com”)

MailFolder(メールフォルダ)

操作対象とするメールフォルダを指定します。日本語の指定が可能です。(例:”受信トレイ”)

OnlyUnreadMessages(未読メールだけ対象とする)

必須項目ではありませんが、既読メールも取得の対象とするためチェックを外します。

Output-MailMessages(出力先)

取得したメールデータを格納する変数を指定します。今回は「result」としていますが名前は何でも構いません。
また変数はList<mailMessage>という型ですが、MailMessagesプロパティ上で「Ctrl + K」を押し変数を作成すると自動でこの型に設定してくれるため、この方法で作成すると簡単だと思います。

ちなみにこのアクティビティは、自身がログインしているPCでメールフォルダを指定するため、当然ですがアカウントとメールフォルダが存在しなければ動作しません。逆に言うと、メールサーバにログインする必要はないため、アカウントとメールフォルダが存在していればパスワードを入力する必要はありません。

メッセージボックスに表示する

メールを受信する準備が整ったので、続いてメールの内容をメッセージボックスに表示する処理を設定します。
「Message Box」アクティビティを配置し、Contentに「result(0).Subject」と記載します。

メールの件名をメッセージボックスで表示する

ここで一度実行してみると、最新メールのタイトルがメッセージボックスに表示されると思います。

メッセージボックスに記載した「result(0).Subject」について説明します。
各ドットを境に意味がわかれています。

result(0)

Output-MailMessagesプロパティに設定した変数名を指定しています。
変数名の後ろの数字はどのメールかを指定しています。(0)と指定することで最新のメール、(1)と指定すると最新から2件目のメールといった具合です。
「Get outlook mail messages」アクティビティはデフォルトで30件取得してきますので変数名(29)が最大となります。

Subject

メッセージボックスに表示したい項目を指定します。ここでは「Subject」と指定しているためメールの件名が表示されます。
他にも「Body」や「CC」など複数あります。(詳細は本ページの下部で説明しています)

例えば2件目のメール本文を表示したい場合は「result(1).Body」となり、3件目のメールCCを表示したい場合は「result(2).CC」といったようになります。
CCなどのようにメールアドレスをメッセージボックスで表示したい場合は文字列型に変換する必要があるため、「result(2).CC.ToString」と指定します。

添付ファイルの保存

メールに添付ファイルが含まれている場合は、ファイルを指定のフォルダに保存することができます。ここでは、「Save Attachments」アクティビティを使用します。

添付ファイルがある場合は自動で保存する

FolderPath

保存するフォルダのパスを指定します。ここでは「”test”」と入力していますがこの場合、プロジェクトフォルダがある場所に「test」フォルダが作成され、その中に添付ファイルが保存されます。自身の環境に合わせてデスクトップや他の場所にしても問題ありません。

MailMessage

「result(0)」のように指定することで添付ファイルがあれば「FolderPath」で指定したフォルダにファイルが保存されます。添付ファイルがないメールの場合は特に何も処理を行いません。(エラーも起きません)

リスト(List)からデータを取得する

「Get outlook mail messages」で取得したデータは、件名や本文などに分けられリストに格納されます。
ここではリストに格納したデータをメッセージボックスで表示する方法を記載します。
「変数名(0).Subject」の様に使用します。2件目以降を取得したい場合には括弧内の数字を変更してください。

List内容備考
Headers(“Date”)日付
Subjectタイトル
Body本文
From.ToString送信者アドレス※文字列型でないため文字列に変換する
Sender.ToString送信者アドレス基本的にはFromと同じ。※
CC.ToStringCC
Priority.ToString重要度
To.ToString送信先

※明確な違いを知りたい場合は、FromとSenderの違い が参考になると思います。

Point

リストではありませんが、次のように指定することでメールの総件数を確認することもできます。
「変数.Count.ToString」で変数全体を.countでカウントする

Get outlook mail messagesのプロパティ

上記で紹介できなかったプロパティです。

プロパティ内容記入例
AccountOutlookに設定されているアカウント“xxx@yyyy.com”
MailFolderメールを取得したいフォルダ“受信トレイ”
Filter受信したメールを特定の条件によってフィルタする。詳細は下記で。
MarkAsRead読み込んだメールを既読にするチェック有り:既読にする
OnlyUnreadMessages未読メールのみ対象とするチェック有り:未読のみ対象
Top読み込むメールの件数30
MailMessages読み込んだメールを変数に格納するresult(変数名)

filterプロパティについて

フィルタープロパティを使用することで、指定した条件に一致したメールのみを取得することができます。
使いづらい点も多く、またワイルドカード「*」や「Like」検索などは現状使用できないようです。
こちらで確認できた使用方法を紹介します。

条件内容条件備考
特定の件名を対象とする“[subject] = ‘対象の件名'”件名に「RE:」があっても指定不要
指定の受信日以降のメールを対象とする“[ReceivedTime] >= ’14/02/2018′”受信日が2018年2月14日以降
メールサイズの指定“[Size] >= ‘22000’”メールのサイズが22KB以上
複数の条件指定“[ReceivedTime] >= ’05/01/2017′ AND [Size] >= ‘22000’”ANDで指定する

受信したメールをエクセルに転記する

せっかくなので取得したメールの項目をエクセルに転記したいと思います。
「For each」アクティビティを使用することで取得したメールを順に全件処理することができます。

Excel application scopeを配置する

データを書き込むエクセルを作成します。「Excel application scope」については、「Excel関連アクティビティ」を参考にしてください。

カウンタ変数の作成

「i」という変数を作成してカウンタ変数にします。型は「Int32」にします。
カウンタ変数とは繰り返し処理内で使用して、処理が繰り返されるごとに数値が増えていく変数のことです。
これを利用することで対象メールを順に処理することができます。

For Eachアクティビティの配置

「Values」にOutputに指定した変数名「result」をセットします。

「Write Cell」アクティビティの配置

シート名は変更せずに、Rangeに「”A” & i + 1」と指定することで、「A1」「A2」…と順に対象セルが変化していきます。
また「Value」には「result(i).Headers(“Date”)」と入力します。これは受信日時を取得する方法ですが、「result(i)」とすることで対象のメールを順に変えていきます。

カウントアップ

最後に、Assign「i = i + 1」とすることで処理が終わる度にカウンタ変数の値を増加させていきます。

これで受信メールの受信日をエクセルに転記することができます。「Write Cell」を他にも配置することで、件名やCC、BCCといった情報もエクセルに記載できます。

  • このエントリーをはてなブックマークに追加
  • Pocket
  • LINEで送る

SNSでもご購読できます。