BOOKFIELD's Knowledge Base
【RPAノウハウ】UiPath|受信したGmailの中から必要な情報を抜き出しファイルに保存する
この記事ではUiPathを用いてGmailを受信し、特定のメールの本文中にある管理番号を正規表現で抜き出してファイルに保存するまでの処理について解説致します。
全体の流れ
全体の流れは以下の通りとなります。
- メール設定
- データテーブル作成
- 受信メールの処理(繰り返し)
- メールのタイトル取得と選別
- 受信日とメールフォーマット取得
- フォーマットに応じて処理分岐
- 管理番号取得
- データテーブルへ受信日と管理番号を追加
- データテーブルの内容をファイル出力
メール設定
最初にGmailへのログイン情報を設定します。パスワードは「パスワードを取得」アクティビティを用いて変数(ここではpassword)に入れておきます。
I「MAPメールメッセージを取得」アクティビティを用いてGmailのメールのメッセージを取得します。プロパティは以下の通りとします。
上限数:30(デフォルト)
サーバー:”imap.gmail.com”
ポート:993
メールフォルダ:”inbox”
パスワード:password(上述)
メール:”(メールアドレス)”
メッセージ:list_mail(後述)
出力にはが最大30個(上限数で設定した数)のメールメッセージを取り込みます。そのため、変数の型はメールメッセージのリスト形式に設定する必要があります。
変数の型を参照し「System.Collection.Generic.List<T>」を検索しリスト内の型として「System.Net.Mail.Message」を選択して下さい。
変数リストでは単に「List<Mail.Message>」と表示されます。変数名は任意ですが、ここでは「list_mail」とします。
データテーブル作成
最終的にcsvファイルへ出力するためのデータの入れ物をデータテーブルとして準備します。
「データテーブルを構築」アクティビティを用い、受信日(String)と管理番号(Striのカラム(列)を作成します(データはカラの状態とします)。
データテーブルの名前は任意ですが、ここでは「dt_new_items」とします。
受信メールの処理(繰り返し)
メールが格納されている変数「list_mail」に対して、リスト内の各要素(個々のメール)に対して繰り返し処理を行う設定をします。この時、アクティビティのプロパティ「TypeArgument」には「System.Net.Mail.Message」を設定する必要がありますので、ご注意下さい。
< アクティビティの設定 >
繰り返し:item(デフォルト)
次のコレクションの各要素:list_mail
< アクティビティのプロパティ >
TypeArgument:System.Net.Mail.Message
値:list_mail
メールのタイトル取得と選別
受信したメールの中からタイトルに「注文確認」という文字が含まれるものだけを処理し、その他のメールに対しては何も行いません。以下の式を使って「title_mail」という変数にメールのタイトル代入します。
title_mail = item.Subject.ToString
「注文確認」という文字が含まれるタイトルのメールを抜き出すための条件分岐の式は以下の通りとなります。
title_mail.Contains(“注文確認”)
受信日とメールフォーマット取得
メールの受信日とフォーマット(htmlか否か)を取得します。これは、htmlフォーマットのメールとプレーンなテキストのメールでは本文の取得方法が異なるためです。
受信日の取得はdatetime関数を用います。最後の部分を書き換えることで、”yyyy-MM-dd hh:mm:ss”の様に、自由に出力フォーマットを変更することが出来ます。
date_mail = datetime.Parse(item.Headers(“Date”)).ToString(“yyyy/MM/dd”)
htmlフォーマットか否かの情報を取得するには以下の式を用います。check_htmlの変数の型はBooleanを使用します。
check_html = item.IsBodyHtml
フォーマットに応じて処理分岐
メールのフォーマットに応じて処理を変えます。check_htmlの変数の型がBooleanであるため、条件分岐のConditionには「check_html」とだけ記述すれば条件が満たされることになります(判定が「True」となる)。
< htmlフォーマットの場合 >
body_mail = item.Headers(“HTMLBody”)
< テキストメールの場合 >
body_mail = item.Body.ToString
管理番号取得
本文の中に含まれる管理番号を取得するには、正規表現によるパターンマッチングを用います。「一致する文字列を取得」アクティビティの「正規表現を設定」をクリックし設定画面を開きます。正規表現の値に以下を設定します。
値:管理番号:[0-9]{9}
これにより「管理番号:000000000」から「管理番号:999999999」までの文字列を取り出すことができます。正規表現の解説は長くなるので、別の機会に紹介します。
結果を入れる変数「num_item」の型は「IEnumerable<Match>」を使用します(プロパティの設定画面で結果のフィールド内で変数を作成すれば自動的にこの型が設定されます)。
データテーブルへ受信日と管理番号を追加
受信日と取得した管理番号を最初に準備しておいたデータテーブル「dt_new_items」に追加します。
列配列は「受信日,管理番号」を代入します。受信日は変数「date_mail」の値を使用します。
管理番号は正規表現を用いて取得した結果「num_item」の中から取り出します。この「num_item」は複数の要素を扱う型(「IEnumerable<Match>」)であるため、「繰り返し(コレクションの各要素)」アクティビティを用いて要素ごとに取り出します。
各要素は「管理番号:000000001」「管理番号:000000002」・・という形式のため、「:」をセパレーターとして使用し、セパレーターの右側にある数字の部分だけを抜き出し、データテーブル「dt_new_items」に追加します。
データ:dt_new_items
列配列:{date_mail, Split(item.ToString, “:”)(1)}
データテーブルの内容をファイル出力
最後にデータテーブルの値をcsvファイルに出力します。書き込み元にはデータテーブル「dt_new_items」を指定します。
以上で、Gmailを受信し、特定のメールの本文中にある管理番号を正規表現で抜き出してファイルに保存するまでのスクリプトが完成です。