教材

【RPA入門】UiPathの使い方5~Excelリストを用いたメール送信(条件分岐)

uipath send mail

RPAの入門として、UiPathの使い方を紹介していきます。今回は、宛先情報が記載されたExcelリストを用いて、繰り返しメール送信する処理を自動化したいと思います。なお、メール本文はテンプレートファイルを使い、メール送信の処理は宛先情報によって条件分岐させます。

1. UiPathの初期設定

【RPA入門】UiPathの使い方1~Webデータ取得(テキスト編)」の記事のStep.1からStep2までを実行してください。

 

2. Excelリストの作成

先ずは、メール送信に用いるExcelリストを作成します。リストの項目は以下の5つとします。ファイル名は「リスト.xlsx」、シート名は「リスト」にします。なお、受信確認できるように、アドレスにはあなたのメールアドレスを入れておきましょう。

  • 企業
  • 担当者
  • アドレス
  • プラン
  • 利用月数

list data

 

プランの種類(ライト、ベーシック)に応じたテンプレートファイルを使い、企業の担当者宛てに個別にメールを送信していきます。なお、今回は以下の条件に一致した方にのみメールを送信します。全員には送信しません。

  • ライトプランかつ利用月数が3ヶ月以上の方
  • ベーシックプランかつ利用月数が3ヶ月未満の方

 

3. テンプレートファイルの作成

メール本文に使用するテンプレートファイルを作成します。今回は、プランの種類に応じて、メール本文を変化させます。「テンプレート」というフォルダを用意し、その中に2つのテキストファイル(ライト.txt、ベーシック.txt)を入れておきます。

実際にメールを送信する際には、テンプレートファイル内の「%COMPANY%」と「%NAME%」の部分には、それぞれ「企業」と「担当者」を置き換えるようにします。英単語を%の文字で囲む理由は、メール本文内の他の場所で同じ英単語を使用していた場合に、そこも誤って置き換えられることを防ぐためです。

■ テンプレート文(ライト.txt)

%COMPANY%
%NAME% 様

いつもお世話になっております。
株式会社Firstの○○です。

「ライトプラン」をご利用いただき、ありがとうございます。
現在ご利用のライトプランは、一部の機能が制限されております。

フル機能をご利用なりたい場合は、「ベーシックプラン」に移行
する必要がございます。

ベーシックプランの詳細は、下記のサイトをご覧ください。
https://.../product/basic

ご検討の程、宜しくお願い致します。


-------------
株式会社First
○○

 

■ テンプレート文(ベーシック.txt)

%COMPANY%
%NAME% 様

いつもお世話になっております。
株式会社Firstの○○です。

「ベーシックプラン」をご利用いただき、ありがとうございます。

当プランをご利用にあたり、何かお困りごとはございませんでしょうか。
当社製品のFAQが、下記のサイトに記載されております。
https://.../product/basic/faq

ご質問や疑問点などがございましたら、お気軽にお問い合わせください。
何卒、宜しくお願い致します。


-------------
株式会社First
○○

 

4. UiPathのワークフロー構築

【Step.1】Mainワークフローを開く

ワークフローを構築していくために、画面左下の「Activities」タブを選択し、画面中央の「Open Main Workflow」をクリックします。

open main workflow

 

【Step.2】Excelリストを開く

作成したExcelリストを開くために、「Excel Application Scope」アクティビティを使用します。画面左側のアクティビティ検索窓に「excel」と入力します。表示された「Excel Application Scope」を、ワークフロー内にドラッグ&ドロップします。

続けて、アクティビティのプロパティ設定を行います。フォルダアイコンをクリックして、開くExcelリスト(リスト.xlsx)を指定します。以降は、「Excel Application Scope」のDoコンテナ内に、実行したい処理を追加していきます。

open excel list

 

【Step.3】Excelリストのデータを読み込む

Excelリストのデータを読み込むために、「Read Range」アクティビティをDoコンテナ内にドラッグ&ドロップします。

read excel list

 

続けて、アクティビティのプロパティ設定を行います。シート名(SheetName)には「リスト」と入力し、範囲(Range)は空白のままにしておきます。通常、範囲は「A1:C5」などの表記で指定しますが、空白にすることで、シート内の全データが自動で読み込まれます。なお、文字列を入力する際は、全体をダブルクオーテーションで括る必要があります(”文字列…”)。

読み込んだリストを保存する変数(DataTable)には、「mailList」という名称の変数を新規作成してセットします。変数を新規作成する場合は、入力欄で「Ctrl + k」を押し、「Set Name:」に続けて変数名を入力し、最後にエンターキーで確定します。これで、リストが変数mailListに保存されます。具体的には、下記のような二次元配列となります。

mailList = [
  ["株式会社いぬ", "犬", "a@co.jp", "ライト", "1"],
  ["株式会社さる", "猿", "b@co.jp", "ライト", "4"],
  ["株式会社きじ", "雉", "c@co.jp", "ベーシック", "5"],
  ["株式会社おに", "鬼", "d@co.jp", "ベーシック", "2"]
]

 

【Step.4】リスト内のデータを1行ずつ処理

最終的には、リスト内のデータを1行ずつ取り出して、順にメールを送信していきたいです。変数mailListに保存されたリストからデータを1行ずつ取り出すために、「For Each Row」アクティビティを使用します。

画面左側のアクティビティ検索窓に「foreach」と入力します。表示された「For Each Row」を、「Read Range」の直下にドラッグ&ドロップします。

for each row

 

続けて、アクティビティのプロパティ設定を行います。繰り返すデータ(DataTable)には、「mailList」を入力します。変数mailListに保存されたリストから1行ずつデータを取り出し、順に変数rowに代入され、「For Each Row」のBodyコンテナ内で変数rowの値を参照することができます。

今回のケースでは、リストに4行のデータがあるため、「For Each Row」のBodyコンテナ内の処理が4回繰り返されます。処理を実行する度に、変数rowには、[“企業”, “担当者”, “アドレス”, “プラン”, “利用月数”]の一次元配列が順に代入されます。

 

【Step.5】リスト内のデータの確認

下図を見てください。

view list data

 

「For Each Row」では、各行のデータが変数rowに代入されます。各行のデータから、各列の値を参照するには、「row.Item(“項目名”).ToString()」と記述します。変数rowの各アイテム(Item)を取り出す形です。最後のToString()はデータの型を文字列に変換するメソッドです。この辺りは深く気にせずに、おまじないと思って割り切りましょう。

企業 → row.Item("企業").ToString()
担当者 → row.Item("担当者").ToString()
アドレス → row.Item("アドレス").ToString()
プラン → row.Item("プラン").ToString()
利用月数 → row.Item("利用月数").ToString()

 

【Step.6】メール送信の条件分岐

今回は以下の条件に一致した方にのみメールを送信します。全員には送信しません。

  • ライトプランかつ利用月数が3ヶ月以上の方
  • ベーシックプランかつ利用月数が3ヶ月未満の方

処理を条件分岐させるには、「If」アクティビティを使用します。プランと利用月数に関する条件式を記述する必要があるので、事前にプランと利用月数の値をそれぞれ変数に保存しておきます。

変数への保存は、「assign」アクティビティを使用します。画面左側のアクティビティ検索窓に「assign」と入力します。表示された「assign」を、「For Each Row」のBodyコンテナ内に2つドラッグ&ドロップします。

assign value

 

アクティビティのプロパティ設定を行います。一つ目の「assign」の変数名(To)には、「plan」という名称の変数を新規作成してセットします。保存する値(Value)には、「row.Item(“プラン”).ToString()」を入力します。

同様に、二つ目の「assign」の変数名(To)には、「month」という名称の変数を新規作成してセットします。保存する値(Value)には、「row.Item(“利用月数”).ToString()」を入力します。これで、プランと利用月数の値は、それぞれ変数planと変数monthに保存されました。

 

では、改めて、条件分岐の「If」アクティビティを設定していきます。画面左側のアクティビティ検索窓に「if」と入力します。表示された「If」を、2つ目の「assign」の直下にドラッグ&ドロップします。

if condition

 

アクティビティのプロパティ設定を行います。「Condition」には任意の条件式を入力します。下記の式を入力してください。2つの条件をOr論理演算子で繋いでいます。前半と後半の条件では、それぞれプランと利用月数をAnd論理演算子で繋いでいます。CInt(month)は、読み込み時に文字として認識されている利用月数を数値に変換しています。

(plan = "ライト" And CInt(month) >= 3) Or (plan = "ベーシック" And CInt(month) < 3)

「If」アクティビティは、左側「Then」と右側「Else」に分かれています。これは、「Condition」に記載した条件式を満たす場合は、左側の「Then」に設定した処理が実行されます。条件式を満たさない場合は、右側の「Else」に設定した処理が実行されます。

今回は、条件式を満たす場合にメールを送信して、条件を満たさない場合はメールを送信しません。従って、以降では、メールを送信する処理を左側(Then)に追加していきます。右側(Else)には特に処理を設定する必要はありません。

 

【Step.7】テンプレートファイルを読み込む

プランの種類(ライト、ベーシック)に応じたテンプレートファイルを読み込みます。画面左側のアクティビティ検索窓に「read text」と入力します。表示された「Read Text File」アクティビティを、「if」アクティビティのThenコンテナ内にドラッグ&ドロップします。

read template

 

アクティビティのプロパティ設定を行います。ファイル名(FileName)には、テンプレートファイルの保存先のパス情報を入力します。なお、プランの種類に応じたテンプレートファイルを選択するために、ファイル名には変数planを組み込みます。パス情報はあなたの環境に合わせて適宜変更してください。

"C\Users\keisuke\Desktop\RPA\テンプレート\" + plan + ".txt"

読み込んだテンプレート文を保存する変数名(Content)には、「template」という名称の変数を新規作成してセットします。

 

【Step.8】テンプレート文を書き換える

読み込んだテンプレート文の冒頭には、「%COMPANY%」と「%NAME%」の記号が埋め込まれています。このまま送信すると都合が悪いため、各宛先の情報をもとに、これらを書き換える必要があります。

■「企業」を書き換える

先ずは、「%COMPANY%」を具体的な値に書き換えます。画面左側のアクティビティ検索窓に「replace」と入力します。表示された「Replace」アクティビティを「Read Text File」の下にドラッグ&ドロップしましょう。

replace company

 

下表の通り、アクティビティのプロパティ設定を行います。

プロパティ項目 入力値 備考
Input template 置換の対象となる文章です。テンプレート文が保存されている変数templateを設定します。
Pattern
"%COMPANY%"
置換される文字です。
Replacement
row.Item("企業").ToString()
置換する文字です。Excelリストの「企業」項目で置換します。
Result template 置換後の文章を保存する変数です。既に作成している変数templateに上書きします。

 

■「担当者」を書き換える

次は、「%NAME%」を具体的な値に書き換えます。画面左側のアクティビティ検索窓に「replace」と入力します。表示された「Replace」アクティビティを、先ほど追加した「Replace」の下にドラッグ&ドロップしましょう。

replace name

 

下表の通り、アクティビティのプロパティ設定を行います。

プロパティ項目 入力値 備考
Input template 置換の対象となる文章です。テンプレート文が保存されている変数templateを設定します。
Pattern
"%NAME%"
置換される文字です。
Replacement
row.Item("担当者").ToString()
置換する文字です。Excelリストの「担当者」項目で置換します。
Result template 置換後の文章を保存する変数です。既に作成している変数templateに上書きします。

 

【Step.9】パスワード情報の設定

メール送信の設定を行う前に、設定で必要になるパスワード情報を準備します。画面左側のアクティビティ検索窓に「pass」と入力します。表示された「Get Password」アクティビティを「Replace」の下にドラッグ&ドロップしましょう。

get password

 

アクティビティのプロパティ設定を行います。パスワード(Password)には、使用するメールアドレスのパスワード情報を入力します。パスワードは暗号化され、*印でマスクされます。パスワードを保存する変数名(Result)には、「password」という名称の変数を新規作成してセットします。

なお、今回は動作確認のために一時的に「Get Password」アクティビティを使用しました。ただし、「Get Password」アクティビティでの永続的なパスワード管理は非推奨のようです。詳細はこちらの公式サイトの内容をご確認ください。

 

【Step.10】メールを送信する

最後に、メールを送信するアクティビティを追加します。画面左側のアクティビティ検索窓に「send」と入力します。表示された「Send SMTP Mail Message」アクティビティを「Get Password」の下にドラッグ&ドロップしましょう。

send mail

 

下表の通り、アクティビティのプロパティ設定を行います。

プロパティ項目 入力値 備考
To
row.Item("アドレス").ToString()
宛先のアドレスです。Excelリストの「アドレス」項目を設定します。
Subject
"製品のご利用に関するお知らせ"
メールの題名です。
Body template メールの本文です。変数templateを設定します。
Port 465 ポート番号です。Gmailを使用する際は465を設定します。
Server
"smtp.gmail.com"
サーバー情報です。Gmailを使用する際は、smtp.gmail.comを設定します。
Email
"xxxx@xx"
送信元のあなたのメールアドレスです。xxxxには適切な値を入力してください。
Password password メールアドレスのパスワードです。変数passwordを設定します。

 

今回はGmailを使用してメールを送信しますが、他のメールサーバーを使用する際は、ポート番号やサーバー情報などを適宜変更してください。なお、Gmailを使用してメールを送信する場合は、一時的に下記の設定を行ってください。この設定でセキュリティレベルが低下するため、動作確認が終わった後は、必ず設定を元に戻すことを忘れないでください。

  • 安全性の低いアプリの許可を有効にする(参考サイト

 

【Step.11】ワークフローの実行

上部パネルの「Debug File > Run」をクリックし、このワークフローを実行してみましょう。

run workflow

 

以下の条件を満たす方(猿さん、鬼さん)にのみ、メールが送信されたと思います。

  • ライトプランかつ利用月数が3ヶ月以上の方
  • ベーシックプランかつ利用月数が3ヶ月未満の方

メール文の冒頭に「企業」と「担当者」が正しく記入されています。また、プランの種類(ライト、ベーシック)に応じて、異なるテンプレート文が適用されています。最後に、変更したセキュリティの設定を元に戻しておいてください。

result lite

 

result basic

 

チャレンジ課題

今回は、メール送信の処理を繰り返す度に、テンプレートファイルを「Read Text File」アクティビティで毎回読み込んでいます。リスト内のデータ数が多い場合は、処理速度に影響が出る可能性も考えられます。この問題に対する解決策と実装方法を考えてみましょう。

 

まとめ

今回は、宛先情報が記載されたExcelリストを用いて、繰り返しメール送信する処理を自動化しました。下記の点を理解して、他の業務にも応用できるようにしましょう。

  • 「Excel Application Scope」を使ってExcelファイルを開く
  • 「Read Range」を使ってExcelリストを読み込む
  • 「For Each Row」を使った繰り返し処理
  • 「If」を使った条件分岐
  • 「Replace」を使った文字の置き換え
  • 「Send SMTP Mail Message」を使ったメール送信

最後に、UiPathに関する参考図書を一冊紹介しておきます。
できるUiPath 実践RPA <amazon.co.jp>

※本書の内容はネット上でも公開されているようです(できるネット)。

より深く「RPA」を学びたい方は、スクールでオンライン講義もやっていますので、良かったらこちらの記事もご覧ください。