UiPathでOutlookを使ってメール受信+作業自動化を実現する方法

By | 2018年10月29日

UiPathでOutlookを使ってメール受信+作業自動化を実現する方法

※2018.3よりUiPathがデフォルト日本語のアクティビティ名となりましたので、
この記事では各アクティビティや機能名を日本語名(英語名)というように記載しています。
また、Outlook関連アクティビティはUiPathのバージョンが2018.3以降ではない場合、別途パッケージのインストールが必要ですのでご注意ください。

UiPathではOutlookによるメール受信・送信を自動化する機能があります。
今回はメール受信をトリガーとした次の作業への自動化手順を解説していきます。

1.準備

まず以下を準備する必要があります。
・アカウント設定済みでメールが受信可能な状態のOutlookが起動している
Outlookアクティビティはシナリオを動作させるとき、仕様上、必ずOutlookを起動していないと正しく動作しません

Outlookは当然必要です。持っていない場合はPOP3などほかのアクティビティを使ってください。
次にOutlookのアカウント設定をしてメールが受信できる状態にしてください。

2.Outlookメールメッセージを取得(Get Outlook Mail Messages)アクティビティを追加

準備ができましたので、さっそくUiPathで処理を作っていきます。
まず、「Outlookメールメッセージを取得(Get Outlook Mail Messages)」アクティビティを追加します。

次に下記画像の通り、「メールフォルダー」でメールが入るフォルダの名前を文字列で指定します。
※アカウントはオプション設定ですので、1つしか設定していない場合は空白でOKです。

メールフォルダーはデフォルトでは”Inbox”となっていますが、これは英語版の「受信トレイ」にあたるもので、
残念ながら日本語のOutlookでは動作しません。今回は「受信トレイ」で設定してみましょう。
※もし、受信トレイの階層より下にあるフォルダにアクセスした場合は\(¥)でWindowsのフォルダを指定するように指定してください。
例えば受信トレイの下にある「情報」という名前のフォルダであれば、「受信トレイ\情報」となります。

ここで取得したメールの情報は出力プロパティのメッセージで指定した変数に入ります。
変数は入力欄でCtrl+Kもしくは右クリックメニューで作成して指定しましょう。

また、「最上部」というプロパティで上から何件目まで取得するかを指定する必要があります。
デフォルトだと30件で、何もいれないと動作しません。もし全部取りたいときは「Int32.Maxvalue」と入れましょう。
※件数については最後のおまけも参照してください。

3.取得したメッセージを繰り返し(コレクションの各要素)アクティビティで処理する

UiPathは簡単に情報を取る部品は揃っているのですが、それを次にどうすればいいかは全く教えてくれないので、
プログラムの知識がないとなかなか扱うのが大変です。
通常、データは取ってきただけではだめで、それを処理する必要があります。
先ほどのアクティビティは対象となるメッセージを一気に全部取ってくるものです。
そのため、「繰り返し(コレクションの各要素)」(For each)アクティビティを使ってそれを1つずつ処理していく必要があります。
先ほどのメッセージ取得アクティビティの後ろに「繰り返し(コレクションの各要素)」(For each)アクティビティを追加しましょう。
さらにその中のBodyにメッセージボックス(message box)アクティビティを入れておいてください。
次に「繰り返し(コレクションの各要素)」のプロパティに注目してください。

「繰り返し(コレクションの各要素)」(For each)アクティビティは繰り返す対象となる変数の型を指定してあげる必要があります。
Outlookで取ってきたものは「Mailmessage」型を指定してあげないといけません
そうしないと下記のようなエラーが出ます。

(このアクティビティの時はこれ以外エラーになるので、正直人間がこれを選ぶ意味がまったくないと思います。
自動化と銘打つならMailmessage型が指定されたらそれぐらいUiPath側で判別してほしいのですが¨)

設定するにはまずプロパティのTypeArgumentを選び、右のプルダウン(Objectになっているところ)を押します。

次に検索ボックスで「mailmessage」と検索します。

同じ名前が複数出てきますが、一番目の「System.Net.Mail」の中にある方を選びます。

これで1件ずつ処理する準備が整いました。

4.取得したメッセージのほしい情報を選ぶ

最後にメールの中のどの情報を操作するか選ぶ方法を覚えましょう。
デフォルトだとitemという変数に1件ずつのデータが入りますので、
「item.」と打つことで、そこから件名や本文などを選択して処理できます。

例としてメッセージボックスに本文を出す時の設定を見ていきましょう。
まず上の画像のようにメッセージボックスの中でitem.と打ちます。
すると、さらに複数の選択肢が表示されます。これがメールの各要素と対応しています。

例えば件名は「.subject」に、本文の文章は「.body」に入っています。
詳細は下記microsoftの.net frameworkのサイトを参考にしてください。
(こういう情報を本家サイトがガイドに載せず、動画や.netに丸投げなのは非常に不親切だと思います)

今回は本文を表示させたいので「item.body」とメッセージボックスに入れましょう。

なお、.bodyはString型のため、.ToStrngをしなくてもエラーにはなりません。

これで実行すればメール本文がメッセージボックスで表示されます。
このようにOutlookのメールを読み取り、自動で作業をすることができます。
今回は単純にメッセージ本文を表示させるだけですが、
条件分岐と組み合わせれば特定の件名やメッセージに対応して、別の処理につなげていくことができます。
なお、Outlookの受信はこの中で設定していませんので、それもしたい場合は単純にベーシックレコーディングなどで、
シナリオの先頭でOutlookの送受信ボタンをクリックさせればOKです。

(おまけ)Outlookのメール仕訳ルール作成を使う方法

Outlookデフォルトの「受信トレイ」に全部入ってしまう状態で、このOutlookのアクティビティを起動した場合、
関係あろうがなかろうがすべてのメールを読みに行ってしまいます。もちろん、「最上部」プロパティを使えば読む件数は限定できるのですが、
もし1日に大量に受信するメールがあるフォルダの場合、多すぎてはみ出してしまう可能性もありますね。
ではこの件数を増やせばいいかというと、そうでもありません。
仮に10000件なんて入っているズボラな受信フォルダがあった場合、読むだけで長時間待つことになります。
そういうときはOutlook側で対応するということも可能です。

まずは処理をしたい件名のルールを考えましょう。
例として件名の中で「業務報告」という文字が入っているものだけを対象としていきましょう。
まずOutlookで「自動処理」というフォルダを作ります。※もちろんフォルダ名はなんでもいいです

次にOutlookで「仕訳ルールの作成」を使って、
件名で「業務報告」という文字があったら「自動処理」というフォルダに振り分ける設定をします。
え、それもUiPathでできるんじゃないの?と思うかもしれません。
もちろんできます、が、先ほど言ったように振り分ける対象が多すぎると、
関係あろうがなかろうがすべてチェックして判定するので処理するまでにめちゃくちゃ時間がかかります。
何でもかんでもUiPathというのはメンテをするのは簡単ですが、よく考えないと時間の無駄になります。
ここはプロの仕分け師であるOutlookに任せるというのも1つの方法です。
ちなみに、この方法で処理した場合、必ず終わったメールは既読にしたりほかのフォルダへ移動させてください。
そうしないと処理済みのメールにも2重で処理をしてしまうことになります。