Automation Anywhere と Office 365 でメール送信を自動化する

# 概要
あなたがもしサポートや営業/マーケティングの担当者だったら、**たくさんの顧客に様々なお知らせを電子メールで送りたい**と思うでしょう。また、あなたがもしエンジニアであれば、社内システムの動作状況ついて異常が起こったら**自動的に電子メールで通知**してほしいと思うでしょう。しかし、それには同じ文面を、必要に応じて宛先や宛名だけ変えて大量に送ったり[^1]、トリガーを元に自動的にメールが送信されるようにする必要があります。一方、あなたのデスクトップにもおそらく入っているであろうMicrosoft Outlookには[VBAによる自動化機能](https://qiita.com/Q11Q/items/ac14d96c00e707de5d13)が備わっているものの、過去の経緯[^2]から仕組み上運用が著しく制限されています。

そんな時に役立つのがRPAによる自動化です。Automation Anywhereでは、IMAP/SMTPインターフェイスを通してメールサーバーと直接自動化をする仕組みがあるので、その方法を中心に見ていきたいと思います。加えてBot Storeに無料で公開されているAutomation Anywhere純正の「[Perform various outlook operations](https://botstore.automationanywhere.com/bot/perform-various-email-operations/)」Meta Bot を使うと、Outlookを通しての操作も自動化できます。

[^1]: いわずもがなですが、たくさんの宛先をTo/CC/BCCに入れて一度に送ってしまうのは個人情報保護/セキュリティの観点からNGです。
[^2]: 2000年代前半に、Outlook VBAを悪用したウィルスやスパムメールが流行りだしたため、メールフォルダーやアドレス帳にアクセスしようとするとダイアログボックスが表示され、人間の許可を介さずに自動化できないようになっています。<br/>![outlook-warning.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/479715/2bc14680-9f34-b9f4-3517-cd9a99fa1d60.png)

**対象**

* Automation Anywhere Enterprise 11.3.2
* Automation Anywhere Community Edition

# 1. メールサーバー (SMTP) を通しての連携
Clientを開いて、連携するメールサーバーの情報を設定したうえで、Send Emailコマンドを使います。

### 1-1.事前設定

1. Clientの「ツール」-「オプション」を開きます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/479715/65e9c329-f65c-030e-6863-42586466130f.png)

2. 左側の一覧から「メール設定」を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/479715/67384487-825b-c03c-18ad-990b52c168a4.png)

3. この画面でメールサーバーの情報とポートを設定します。
Office 365 であれば以下の項目を入力します。

* SMTP ホスト：smtp.office365.com
* SMTP ポート：587
* サーバーに安全な接続 (SSL/TLS)を使用：:ballot_box_with_check: 
* サーバーには認証が必要です：:ballot_box_with_check: 
    * ユーザー名: Office 365ユーザーのユーザー名
    * パスワード: 上記ユーザーのパスワード

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/479715/06ce7f20-e9b5-21e2-970e-022c4b40f855.png)
その後、「OK」をクリックします。

### 1-2.Send Emailコマンドでメールを送信する
ワークベンチを開き、コマンド一覧の中から「Send Email」をドラッグ＆ドロップします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/479715/223a406f-2e74-b3ab-759a-d2095868d589.png)

すると、以下のダイアログボックスが表示されます。通常のメール送信と同様に、To/CC/BCCの設定、件名 (Subject) の設定、本文 (テキスト or HTML)、添付ファイルの指定が可能です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/479715/87cf9b03-ed3e-3d51-4323-3f3092756325.png)
`F2`を押すと変数の挿入ができます。すべてのフィールドで変数の利用が可能です。変数を指定しておくと、後で出てくる複数メールの連続送信の場合に、To/CC/BCCを切り替えたり、本文中の文字列 (宛名など)を切り替えたり、添付ファイルを切り替えたりといった柔軟な作業が簡単に行えます。

添付ファイルの指定は「`📎` (クリップマーク)」をクリックすることでファイル指定標準ダイアログボックスで行うか、テキストを直接入力します。「`$` (ドルマーク)」をクリックすると、<Attach Variables>というテキストが挿入されます。これは、システムのデバッグ時などに使うと思われますが、すべての変数 (システム変数およびユーザー定義変数) の値をリストにしたテキストファイルが添付されます。

以上を踏まえて、ひとまず必要な情報をダイアログボックスの所定の位置に入れてみましょう。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/479715/ab7244cb-a0de-3da8-d54e-5fdcba970737.png)
メッセージにはHTMLも選ぶことができ、フォント名、文字サイズ、太字、斜体、下線、文字色、ハイパーリンク、画像挿入といったことが可能です。さらなる表現力の向上を行うには、記事「[【Automation Anywhere】Send Email コマンドのHTMLメールの表現力を上げるには](https://qiita.com/RPAbot/items/2fe0de7671d845f747df)」をご覧ください。

すると、以下のような1行のアクションリストが出来上がります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/479715/72244e2a-5925-4a14-2ecf-23c002f49152.png)
これを保存後、実行してみましょう。

Office 365の該当アカウントをWebメールで開いてみると、以下のように送信ができていることがわかります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/479715/b3c93bcf-6351-54e5-b62c-dfc92264eb6f.png)

添付されているVariable.txtの内容は以下の通りです。

```Variable.txt
************ System Variable ************

--------------------

Year : 2019
Month : 9
Day : 28
Date : 2019/09/28 23:47:59
Hour : 23
Minute : 47
Second : 59
Millisecond : 643
Clipboard : 
Machine : *****
Counter : 
CurrentDirectory : 
FileName : 
Extension : 
FolderName : 
Dataset Column : 
Table Column : 
Excel Column : 
Error Line Number : 0
Error Description : 
Email From : 
Email To : 
Email Cc : 
Email Subject : 
Email Message : 
Email Received Date : 
Email Received Time : 
Trigger Value : 
Filedata Column : 
Excel Cell Column : 
Excel Cell Row : 
XML Data Node : 
TotalRAM : 16218
CPUUsage : 59.00867
OSName : Microsoft Windows 10 Pro 64-bit
RAMUsage : 38432
AAApplicationPath : C:\Users\*****\Documents\Automation Anywhere Files
AAInstallationPath : C:\Program Files (x86)\Automation Anywhere\Enterprise\Client\
AATaskName : C:\Users\*****\Documents\Automation Anywhere Files\Automation Anywhere\My Tasks\email.atmx
AAControlRoom : http://localhost
AATaskExecutor : 


************ User Defined Variable ************

--------------------

Prompt-Assignment : Test-Value 
my-list-variable : my-value-1 , my-value-2 , my-value-3 , my-value-4 , my-value-5
```
これで、Send Emailコマンドでメールが送れることがわかりましたね。

### 1-3.Excelファイルの宛名一覧に差し込み印刷でメールを送る
次に、Excelファイルにある宛先一覧にメールを送るタスクを作ってみましょう。ポイントはExcelファイルからの読み込みアクションと、Send Emailコマンドのパラメーター指定には変数を使って宛先ごとに内容を変更できるようにすることです。

データファイルとしてaddress.xlsxという以下のファイルを作ります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/479715/f30557ad-9b54-a55a-ece0-d8d989838e20.png)

Send Emailコマンドは以下の赤枠で囲った部分に変数を入れます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/479715/cc22a22d-0141-12f8-b125-13a3b2926884.png)

アクションリストは以下のようになります。Excel/Open Spreadsheetコマンド、Excel/Get All Cellsコマンド、Loopコマンド、Variable Operationコマンドを使います。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/479715/81dc90d9-eb43-d872-641b-f555b419a29e.png)

これを実行すると、3つの宛先にそれぞれ違う文面と違う添付ファイルが届けられることがわかります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/479715/7ea164dd-ccd4-89e4-95fb-c7b0aff1994f.png)

**注1:** 電子メールアドレスが見つからない場合は、「パラメーターまたは引数に構文エラーがあります。」というエラーが返ってきますが、その後に以下のエラーメッセージが表示されている場合はNDRが返ってきています。実際の運用では電子メールアドレスが見つからない場合も考慮してエラーハンドリングを行ってください。
>サーバーの応答: 5.1.5 Recipient address reserved by RFC 2606

**注2:** メールサーバーは送信制限があることがあるのでご注意ください。Office 365の場合は以下の通りです。多くのメールを送る場合は、Send Emailコマンドの間に適切な長さのDelayコマンドを置いて、1分あたりの送信メッセージ数上限を超えないようにしましょう。
>**SMTP クライアント送信の制限事項**
デバイスで複数の Office 365 メールボックスのログイン資格情報を保存できる場合を除き、1 つのメール アドレスからのみメールを送信できます。Office 365 では、1 分あたりの送信メッセージ数の上限は 30、1 日あたりの受信者数の上限は 10,000 に設定されています。

# 2. Outlook を通しての連携
Bot Storeに無料で公開されているAutomation Anywhere純正の「[Perform various outlook operations](https://botstore.automationanywhere.com/bot/perform-various-email-operations/)」Meta Bot を使った連携方法を紹介しようと思ったのですが、記事が長くなったので、また次回ご紹介します。

# 参考資料

* [[メール自動化] コマンド](https://docs.automationanywhere.com/bundle/enterprise-v11.3/page/enterprise/topics/aae-client/bot-creator/commands/email-automation-command.html?_LANG=jpjp) - Automation Anywhere Documentation
* [Office 365 を使用してメールを送信するように多機能デバイスまたはアプリケーションをセット アップする方法](https://docs.microsoft.com/ja-jp/exchange/mail-flow-best-practices/how-to-set-up-a-multifunction-device-or-application-to-send-email-using-office-3) - Microsoft Docs
* Gmail との連携方法は、記事「[Automation Anywhere - メールを送ってみよう！](https://licensecounter.jp/engineer-voice/blog/articles/20190827_automation_anywhere_mail.html)」をご覧ください。