標準部品で電子メールを操作をしてみよう(Microsoft Outlook 編)
こんにちは、バディです。今日はEメールの操作についてお伝えしたいと思います。標準部品(VBO)を利用することで、「通知のためにメールを送信したい」「メールの内容を使って自動化をしたい」という要望に応えることができます。
Eメールを操作するための標準部品(VBO)は、「Email - POP3_SMTP」と「MS Outlook Email」の2つありますが、今回は、「MS Outlook Email」を詳しく見ていきます。
MS Outlook Email とは?
標準部品(標準VBO)としてインストールされる
Blue Prism Enterprise をインストールすると一緒に標準部品(標準VBO)が下記のフォルダに置かれます。一般的な定型業務に必要な操作のための部品が用意されています。たとえば、文字列操作、コレクション操作や様々なアプリケーション(ExcelやOutlookからGoogle Sheetsなど)を操作するための部品が、あらかじめ用意されています。
C:\Program Files\Blue Prism Limited\Blue Prism Automate\VBO
このフォルダには、多くのVBOのファイルが置かれています。利用するためには、それぞれインポートする必要があります。参考までに一覧を下記に記載します。
BPA Object - Calendars.xml
BPA Object - Data - OLEDB.xml
BPA Object - Data - SQL Server.xml
BPA Object - Email - POP3_SMTP.xml
BPA Object - Google Sheets.xml
BPA Object - MS Excel.xml
BPA Object - MS Outlook Email.xml
BPA Object - MS Word.xml
BPA Object - System - Active Directory.xml
BPA Object - Utility - Collection Manipulation.xml
BPA Object - Utility - Date and Time Manipulation.xml
BPA Object - Utility - Encryption.xml
BPA Object - Utility - Environment.xml
BPA Object - Utility - File Management.xml
BPA Object - Utility - Foreground Locker.xml
BPA Object - Utility - General.xml
BPA Object - Utility - HTTP.xml
BPA Object - Utility - Image Manipulation.xml
BPA Object - Utility - JSON.xml
BPA Object - Utility - Locking.xml
BPA Object - Utility - Network.xml
BPA Object - Utility - Numeric Operations.xml
BPA Object - Utility - Strings.xml
BPA Object - Utility - Windows Compressed File.xml
BPA Object - Webservices - OAuth2.0.xml
BPA Object - Webservices - REST.xml
※ Blue Prism Enterprise v7.1.2 - dir /bのコマンド結果
使うためには、まずインポート!
今回は、「MS Outlook Email」を利用するため、BPA Object - MS Outlook Email.xml ファイル をインポートします。
1)インポート>プロセス/オブジェクト を選択
2) 参照ボタンを押して、BPA Object - MS Outlook Email.xml ファイルを選択します。
3) 該当のファイルを選択し、開くボタンを押します。
C:\Program Files\Blue Prism Limited\Blue Prism Automate\VBO\BPA Object - MS Outlook Email.xml
4) [次へ]のボタンを押します。
5)コンポーネント名が、MS Outlook Email VBOになっていることを確認して、 [次へ]のボタンを押します。
6)インポートが成功したら、[次へ]のボタンを押します。
7)[終了]のボタンを押します。
8)これで、インポートが完了しました。スタジオで、文字列「Outlook」で検索すると、オブジェクト>Default(デフォルト)の中にインポートされていることが確認できます。
利用できるアクションのリスト
送信だけでなく、フォルダの操作など多くのアクションがそろっています。
フォルダの存在確認
電子メールのフラグのクリア
フォルダの作成
電子メール の削除
フォローアップのフラグメール
電子メールの転送
アイテム数の取得
フォルダ内の項目の取得
GetReportItem メソッド
受信したアイテムの取得(基本、詳細設定、エキスパート)
送信済みアイテムの取得(基本、詳細設定、エキスパート)
電子メールを既読としてマーク
電子メールを未読としてマーク
電子メールを受信トレイのサブフォルダに移動する
アイテムの移動
全員にメールで返信
メールに返信
添付ファイルの保存(特定)
添付ファイルの保存(すべて)
電子メールをファイルとして保存
電子メールの送信
プロファイルの設定
実際に動かしてみよう!
よく利用するアクションは3つ
今回は、以下の3つのアクションを利用します。この3つのアクションを使うことで、メール操作に関する多くの要望を満たすことができると思います。
受信したアイテムの取得 - Get Received Items (Basic)
アイテムの移動 - Move Item
電子メールの送信 - Send Email
『重要』動かす前に…DXにある最新の部品に上書き
この記事の中で最も重要な内容かもしれません。Blue Prism Enterprise と一緒にインストールされる標準部品(VBO)「MS Outlook Email」のアクションプロパティの一部が反映されません…。
たとえば、アクション「受信したアイテムの取得 - Get Received Items (Basic)」において、操作するメールの対象をいくつかの項目でフィルタリングできますが、差出人のメールアドレス(Sender Email)でフィルタリングできません。項目はあるにもかかわらず、値を入れても無視されてしまいます。
別の項目である「差出人の表示名(Sender Name)」でフィルタリングできますが、以下のようなメールを区別することはできません。
Taro Yamada (t.yamada@sscinc.com)
Taro Yamada (t.yamada@blueprism.com)
Taro Yamada (t2.yamada@blueprism.com)
※ メールアドレスは異なるものの表示名は「Taro Yamada」で同じため
社内外に関わらず、漢字違いの同名の差出人も多いこともありますよね。そのような場合は、困ってしまいます。(Outlook側で事前に、あるサブフォルダに振り分けるなど、回避の方法はありそうですが…)
解決方法として、Blue Prism Digital Exchange(DX)から最新版をダウンロードすることをお勧めします。
Function for MS Outlook VBO - 10.2.3
少なくとも、私の環境では、DX上の最新版を上書きインポートすることで、差出人のメールアドレスでフィルタリングができない問題は解消されました。
インポート方法は、先に記載した内容と基本的に同じですが、2つの注意点があります。
注意1)Blue Prism リリースファイルとして提供されているため、[インポート]>[リリース/スキル]を選択すること
注意2)上書きをすること
IDが一緒になっており、Blue Prism Enterprise とインストールされる標準部品(VBO)と同じものである認識になります。特別な理由がない限り、アップグレードとして上書きをします。(ただし、すでにこの部品を別のプロセスで利用している場合は、そのプロセスに影響が無いことを確認してから上書きする必要があります。一般的には、すでに利用がされているVBOの変更には慎重になるべきです。)
ユースケースを考えて実行してみる
さっそく、開発していきます。その前に、簡単なユースケースをイメージしてみました。以下の3つのステップを想定したプロセスです。
メールで業務の依頼を受ける(受信したアイテムの取得)
メールを作業済みとして任意のフォルダに格納する(アイテムの移動)
処理が完了したことを通知する(電子メールの送信)
1. メールで業務の依頼を受ける(受信したアイテムの取得)
まずは、メールを受信します。正確に言うと、受信されたメールのアイテムを操作します。利用するアクションは下記になります。
「MS Outlook Email VBO::Get Received Items (Basic)」
メールのアイテムをフィルタリングして、特定のメールのアイテムをコレクションに読み込みます。
多くのメールが受信される中、どのように該当のメールを取得するか?
入力項目でフィルタリングを行います。どの期間に?誰から?どんな件名で?どのサブフォルダに置いてあるのか?この4項目で絞りたいと思います。
どの期間(Received Earliest, Received Latest)
誰から(Sender Email)
どんな件名(Subject)
サブフォルダ(Sub Folder)
多くの項目がありますが、すべて埋める必要はありません。例えば、「Sender Email」のみ値を記載した場合は、差出人をメールアドレスでフィルタリングした結果がコレクションに入ります。Outlook上で同じことをした場合は以下のような感じですね。
出力の項目は以下です。コレクション「Items」には、フィルタリングされたメールのアイテムがコレクションとして入ります。また、フィルタリングされたメールの数も「Item Count」として確認することができます。
サンプルでは、フィルタリングを以下のように設定しています。
1)どの期間(Received Earliest, Received Latest)
実行した日に限定(0時から現時刻の間)
※ 事前に「複数の計算」ステージを利用して、その日の日本時間の午前0時と現時刻をデータコレクションに入力
2)誰から(Sender Email)
t.yamada@blueprism.com
3)どんな件名(Subject)
【処理依頼】から始まる件名
※ *ワイルドカードを利用しています
4)サブフォルダ(Sub Folder)
受信トレイ>検証トレイ>処理前 フォルダ 内のみ
その他にフラグとして、下記も指定していますが、すべてデフォルトの値と同じになっています。
「Include Read」既読 を含めるか? True or False
「Include Unread」未読 を含めるか? True or False
「Prefer Plain Text Body」HTMLの場合もテキストでメッセージ(Body)を取得するか? True or False
※ デフォルトが太文字
サンプルでは、フィルタリングの項目をすべてデータコレクションの方に入力するようになっています。
データコレクションの例として、Subject の値を見てみましょう。データ型はテキストになっていますが、「""」(ダブルクォーテーション)で囲まれていません。アクションのプロパティに直接入れるときは、「""」で囲まないとエラーとなりますが、データコレクション経由で入力するときは、「""」で囲むと意図した内容とならない場合があります。
今回の場合は、Sender Email については、「""」で囲む有無のどちらでも問題になりませんでしたが、Subuject の場合は、意図したフィルタリングができなくなりました。
実行した結果(出力)は?
コレクション「Items」には、何が入るのかを確認します。フィールドは以下の通りです。
今回は2個のメールが、フィルタリングされています。それぞれのメール(コレクションの行)に対して処理します。
たとえば、メールの本文(Body)や添付(Attachments)の情報を活用して次の処理(たとえば、社内システムに入力するなど)を進めることができます。
今回は、メール操作のお話しなので、その操作はスキップします。
2. メールを作業済みとして任意のフォルダに格納する(アイテムの移動)
メールを利用する処理が終わったら、ユースケースの次のステップである完了済みとして別のサブフォルダに移動させます。今回のサンプルでは、「処理前」フォルダから「処理後」フォルダへ移動させます。
利用するアクションは下記になります。
「MS Outlook Email VBO::Move Item」
どのように該当するメールを特定するのか?
メールには、ユニークなIDが付いています。それが、EntryIDです。ここで、もう一度、コレクションの中身を振り返ります。
このように、メールごとにユニークな140文字のIDが付いています。これを利用して該当のメールを特定して、そのメールを別のフォルダに移動します。
実際に別のフォルダに移動してみる
まず、EnteryIDを取得します。次に、そのEnteryIDを入力項目として、アクション 「アイテムの移動 - Move Item」 を実行します。
「EntryIDの取得」は以下の通りです。コレクションItemsからEntryIDの値のみを抜き出して、データコレクション「EntryID」に入れます。
アクション 「アイテムの移動 - Move Item」 を利用するためにはもう1つ入力が必要になります。
それは、移動する先のフォルダ名になります。
移動先のフォルダ名の指定の方法は、下記の通りです。フォルダ名だけでは、対象が無いとエラーとなるため、注意が必要です。
出力としては、新しいEntryIDが返ってきます。サンプルでは、New Entry IDというデータコレクションに出力しています。
新しいEntryIDとは?
なぜこの出力が必要になるかというと、別のサブフォルダに移動するとEntryIDが変更されるからです。
サンプルでは、メールを「処理前」フォルダから「処理後」フォルダに移動させていますが、処理中フォルダなど複数のフォルダを移動する際には、この新しいEntryIDを追跡して処理ができそうですね。
3. 処理が完了したことを通知する(電子メールの送信)
最後に、メールを送信します。
利用するアクションは下記になります。
「MS Outlook Email VBO::Send Email」
今回は、定型文を送るのみの内容ですが、少し工夫をして、リンクのあるHTML形式のメールを送るものを開発します。
メールを送るための入力の項目は?
多くの入力の項目がありますが、そのうち3つを利用します。
1)件名(Subject)
2)宛先(To)
3)本文(Message)
今回は、定型の内容を設定します。あらかじめ、データコレクションにテンプレートとして用意します。サンプルでは以下の通りです。
1)件名(Subject)
【処理完了】とします。
2)宛先(To)
差出人に返すため、t.yamada@blueprism.comとします。
3)本文(Message)
HTMLメール用の本文を記述します。
HTMLメール用の本文をどのようにつくるか?
HTMLなら任せてという人も多いかと思いますが、実際はXHTMLになっており、HTMLが拡張された構成になっています。Outlook用のXMLネームスペース(xmlns)を使って、独自の要素などが定義されていますので、1から記述するのは困難です。
以下のようなHTMLメールを送信したいということであれば、一度、手動でメールを作成して、受信したメッセージの内容を見てみましょう!
ステップ1で行った「受信したアイテムの取得」を利用して、コレクションItemsに入れてあげます。するとメールの本文は、Body(テキスト)に、XHTML形式で入っています。
その内容は以下の通りです。
<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40"><head><meta name=Generator content="Microsoft Word 15 (filtered medium)"><style><!--
/* Font Definitions */
@font-face
{font-family:"Cambria Math";
panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
{font-family:游ゴシック;
panose-1:2 11 4 0 0 0 0 0 0 0;}
@font-face
{font-family:"\@游ゴシック";
panose-1:2 11 4 0 0 0 0 0 0 0;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
{margin:0mm;
text-align:justify;
text-justify:inter-ideograph;
font-size:10.5pt;
font-family:游ゴシック;}
a:link, span.MsoHyperlink
{mso-style-priority:99;
color:#0563C1;
text-decoration:underline;}
span.17
{mso-style-type:personal-compose;
font-family:游ゴシック;
color:windowtext;}
.MsoChpDefault
{mso-style-type:export-only;
font-family:游ゴシック;}
/* Page Definitions */
@page WordSection1
{size:612.0pt 792.0pt;
margin:99.25pt 30.0mm 30.0mm 30.0mm;}
div.WordSection1
{page:WordSection1;}
--></style><!--[if gte mso 9]><xml>
<o:shapedefaults v:ext="edit" spidmax="1026">
<v:textbox inset="5.85pt,.7pt,5.85pt,.7pt" />
</o:shapedefaults></xml><![endif]--><!--[if gte mso 9]><xml>
<o:shapelayout v:ext="edit">
<o:idmap v:ext="edit" data="1" />
</o:shapelayout></xml><![endif]--></head><body lang=JA link="#0563C1" vlink="#954F72" style='word-wrap:break-word;text-justify-trim:punctuation'><div class=WordSection1><p class=MsoNormal><span style='font-size:11.0pt'>処理が完了しました。下記のフォルダを参照してください。<span lang=EN-US><o:p></o:p></span></span></p><p class=MsoNormal><span lang=EN-US style='font-size:11.0pt'><o:p> </o:p></span></p><p class=MsoNormal><span lang=EN-US style='font-size:11.0pt'><a href="file:///C:/BluePrism/HandsOn">C:\BluePrism\HandsOn</a><o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US style='font-size:11.0pt'><o:p> </o:p></span></p><p class=MsoNormal><span lang=EN-US style='font-size:11.0pt'><o:p> </o:p></span></p><p class=MsoNormal><span lang=EN-US style='font-size:11.0pt'>Blue Prism </span><span style='font-size:11.0pt'>デジタルワーカー より<span lang=EN-US><o:p></o:p></span></span></p></div></body></html>
これを今回は、データコレクション「Message Template」に入れて実行します。
これで、HTML形式のメールが送信できました。結果ファイルを直接リンクでお知らせしたい場合は、HTML形式が便利ですね。
おまけ:
重要度 - Importanceは、デフォルト1になりますが、値2を入れると下記の様になります。(値0~2を設定できます。0:低 - 青い↓、1:[無]、2:高 - 赤い!)値1が一番目立たないような気もしますが…。必要に応じて設定してください。
サンプル
読むよりも実際に触った方が理解が早い!そんな行動派のあなたのためにサンプル プロセスをご用意しました。記事と合わせてご利用ください。
想定した業務の流れ
1)メールで業務の依頼を受ける(受信したアイテムの取得)
メールは次のものが対象
・受信トレイ>検証トレイ>処理前のフォルダ
・本日のメールのみ(0時から実行の現時刻までに受信されたもの)
・件名は、【処理依頼】から始まるもの
・差出人のメールアドレスがt.yamada@blueprism.com
2)処理後に、メールを作業済みとして任意のフォルダに格納する(アイテムの移動)
・1)でフィルタされたメールの数だけ、処理を繰り返す
・メールの内容を社内システムに登録する(コレクションを使った操作)
・登録が終わったメールは、下記のフォルダに移動する
受信トレイ>検証トレイ>処理後のフォルダ
3)処理が完了したことを通知する(電子メールの送信)
すべての作業が終わったら、終了の通知メールを送る(ただし、処理の対象が無い場合は、メールは送信しない。)メールの内容には以下を入れる
・結果の内容が入ったフォルダのリンク
フローチャート図の全体
フィルタリングによって複数のメールが検出された場合は、繰り返しステージによって、処理を行います。
注意
機能の確認用としてください。エラー処理などは含まれていませんので、そのままのご利用は避けてください。
参考のための初期値が入っているので、変更をしてから実行してください。
実行において下記のような考慮が必要です。
実行について
プロセスを実行するとバックグラウンドでOutlookが起動します(タスクマネージャー上は、アプリではなく、バックグラウンドに表示)。事前にOutlookを起動しておく必要はありません。
しかしながら、注意にも記載した通り、メールを受信するのは、あくまでもOutlook になります。実際に利用する際には、定期的に実行するなど、工夫が必要になるかもしれません。なぜなら、一度目の実行は受信する前に、処理が進むためです。
ダウンロード
プロセスファイルのみです。実行するためには、別途Outlook Email VBOをダウンロードして、インポートする必要があります。
・サンプル プロセス ファイル
プロセスファイルのみです。実行するためには、別途Outlook Email VBOをダウンロードして、インポートする必要があります。
・Outlook Email VBO(Blue Prism DXより)
ダウンロード済みのOutlook Email VBOを下記に置きます。リリースファイルとユーザーガイドと2つのファイルになります。(3/14時点)
まとめ
自動化すると何かしらの通知をしたくなると思います。完了のお知らせや失敗の通知も必要になるでしょう。
通知の手段として、まず思い浮かぶのがメールかもしれません。
標準部品(標準VBO)の「MS Outlook Email」であれば、すぐにメールの操作が可能になります。通知だけでなくOutlookの豊富な機能や設定を利用して、自動化のユースケースを広げることができます。
新しいユースケースができましたら、ぜひ私たちに教えてください。