Power Automate Desktopを使った定型メール自動送信ツールをつくってみた。

![青とオレンジ 棒 マーケティング プレゼンテーション.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2697311/b9a9084d-5b47-b5c9-a2b1-4f0f29c1459a.jpeg)
# 定型文メールは意外と面倒

こんにちは。ツールを作成して業務の自動化できないか日々考えているyoneといいます。

さっそくですが、メールで定型文を送信するといったことありませんか？
私は取引先や社内向けの連絡で多いとき何十件とメールを送信していますが、その中には定型文のメールがいくつかあります。
例えば、

・定型業務連絡
・取引先への書類関連の送付依頼　等

そういった定型的なメールを作成後に送信するだけとはいえ、宛先・Cc・Bcc・件名・本文と入力するのは**簡単にできるとはいえ意外と面倒くさい**ですよね。また、同僚から「この前送ったメールどれだっけ？」と探すのに苦労していたようで、理由を聞くと「前回出したメールと同様の言い回しでメールを送信したいけど、その**前回の送信メールが見つからない**」とのこと。私もこれよくあるなと納得。この問題も定型メールとして本文を管理することで解決できるのでは？


というわけで、**定型文メールを自動送信するツール**を作成してみました！

# 完成品はこちら
　**誰の（社員番号）、どの定型文メール（メール種別）かを選んでメール送信します。**

https://twitter.com/DaieiYoneyama/status/1535279878182170624

**自動送信されたメールはこちら↓↓↓**
![mail.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2697311/8da57c3e-e444-d576-ab94-ac6e9e239668.jpeg)
# 作成してみよう！
## 今回使用したもの
　・[Power Automate Desktop](https://powerautomate.microsoft.com/ja-jp/robotic-process-automation/)
　　データの収集・整理・加工などパソコンで操作している手順を記録して、
　　業務効率につながるアプリを開発できる製品
　・Excel
　　表計算ソフト
　・outlook
　　電子メールクライアントソフト

## 作成手順

### 1. Excelにメール送信情報を一覧化する。
　メール送信に必要な基本情報の一覧を作成します。
　※社員番号・メール種別の単位で作成しています。

**■今回設定した情報**
<dl>
<dt>・社員番号<dt>
<dd>利用者の社員番号を設定</dd>
<dt>・メール種別</dt>
<dd>定型文の種類を番号で設定</dd>
<dt>・To</dt>
<dd>送信メールの宛先(To)を設定</dd>
<dt>・Cc</dt>
<dd>送信メールのCcを設定</dd>
<dt>・Bcc</dt>
<dd>送信メールのBccを設定</dd>
<dt>・件名</dt>
<dd>送信メールの件名を設定</dd>
<dt>・本文</dt>
<dd>送信メールの件名を設定</dd>
<dt>・添付ファイルパス</dt>
<dd>添付したいファイルパスを設定</dd>
</dl>

**実際に作成したExcelは以下↓↓↓**
![excel.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2697311/1732f54a-42bd-e247-1ce0-746f67c9f64b.jpeg)

### 2. Power Automate Desktopで自動送信メールのフローを作成する。
送信したい定型文のメールを選び、その選んだものが「1. Excelにメール送信情報を一覧化する。」で作成したExcelに該当するメール情報が存在した場合、定型文メールを送信するフローを作成します。

#### ・全体フロー図
![全体フロー.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2697311/7e41fbcf-892c-7b6b-18c7-04cfbdc2a935.jpeg)
#### ・全体フロー説明
① ダイアログを表示して社員番号を入力・メール種別を選択するアクションを追加。
　追加アクション：**[メッセージ ボックス] - [リストから選択ダイアログを表示]**
　　　　　　　　　**[メッセージ ボックス] - [入力ダイアログを表示]**

② 「1. Excelにメール送信情報を一覧化する。」で作成したExcelよりメール送信情報を
　取得するアクションを追加。
　追加アクション：**[Excel] - [Excel の起動]**
　　　　　　　　　**[Excel] - [Excel ワークシートから読み取り]**
　　　　　　　　　**[Excel] - [Excel を閉じる]**

③ ②で取得したメール送信情報の件数文繰り返し行うアクションを追加。
　追加アクション：**[ループ] - [For each]**

:::note info
[For each]アクションはExcelに記載した複数行のメール情報を１行づつ取り出して行数文繰り返し処理を行ってくれます。

以下の表でいうと、１回目は①の行データを取得、２回目は②のデータを取得といった感じで処理されていて、全３行のデータがあるので、３回繰り返し処理が行われます。

|   | メール情報① | メール情報② |
|:-:|:-----------|:-----------|
| ① |mail①-1|mail②-1|
| ② |mail①-2|mail②-2|
| ③ |mail①-1|mail②-3|


:::

④ ①で選択されたメール種別とExcelのメール種別を比較するアクションを追加。
　・一致する場合は⑤へ
　・一致しない場合は③へ
　追加アクション：**[条件] - [if]**

⑤ ①で選択された社員番号とExcelの社員番号を比較するアクションを追加。
　・一致する場合は⑥へ
　・一致しない場合は③へ
　追加アクション：**[条件] - [if]**

⑥ Outlookを起動してメール送信するアクションを追加。
　追加アクション：**[Outlook] - [Outlook を起動します]**
　　　　　　　　　**[Outlook] - [Outlook からのメール メッセージの送信]**
　　　　　　　　　**[Outlook] - [Outlook を閉じます]**

⑦ メール送信が完了したため繰り返し処理を終了するアクションを追加。
　追加アクション：**[ループ] - [ループを抜ける]**

⑧ フロー終了のメッセージ出力するアクションを追加。メール送信できた場合と
　メール送信できなかった場合で表示するメッセージを変えています。
　追加アクション：**[条件] - [if]**
　　　　　　　　　**[条件] - [else]**
　　　　　　　　　**[メッセージ ボックス] - [メッセージを表示]**

#### ・作成したフローコード
　作成したフローコードです。試してみたい方はぜひ使ってみてください。

<details><summary>フローコード</summary>

```:実際に作成したフローコード
Display.SelectFromListDialog.SelectFromList Title: $'''送信メール選定''' Message: $'''送信したい定型メールを選択してください。''' List: $'''XXXX１
XXXX２
XXXXX３''' IsTopMost: True AllowEmpty: False SelectedItem=> SelectedItem SelectedIndex=> SelectedIndex ButtonPressed=> ButtonPressed3
Display.InputDialog Title: $'''社員番号入力''' Message: $'''社員番号を入力してください。''' InputType: Display.InputType.SingleLine IsTopMost: True UserInput=> SyainNo ButtonPressed=> ButtonPressed2
SET MailSend TO $'''false'''
Excel.LaunchExcel.LaunchAndOpenUnderExistingProcess Path: $'''作成したメール送信情報のExcelファイルのパスを指定''' Visible: True ReadOnly: False Instance=> ExcelInstance
Excel.ReadFromExcel.ReadAllCells Instance: ExcelInstance ReadAsText: True FirstLineIsHeader: True RangeValue=> ExcelData
Excel.CloseExcel.Close Instance: ExcelInstance
LOOP FOREACH CurrentItem IN ExcelData
    SET RowSyainNo TO CurrentItem['社員番号']
    SET MailKind TO CurrentItem['メール種別'] - 1
    IF MailKind = SelectedIndex THEN
        IF SyainNo = RowSyainNo THEN
            Outlook.Launch Instance=> OutlookInstance
            Outlook.SendEmailThroughOutlook.SendEmail Instance: OutlookInstance Account: CurrentItem['To'] SendTo: CurrentItem['To'] CC: CurrentItem['Cc'] BCC: CurrentItem['Bcc'] Subject: CurrentItem['件名'] Body: CurrentItem['本文'] IsBodyHtml: False Attachments: CurrentItem['添付ファイルパス']
            Outlook.Close Instance: OutlookInstance
            SET MailSend TO $'''true'''
            EXIT LOOP
        END
    END
END
IF MailSend = $'''true''' THEN
    Display.ShowMessageDialog.ShowMessage Title: $'''メール送信''' Message: $'''メール送信が完了しました。''' Icon: Display.Icon.Information Buttons: Display.Buttons.OK DefaultButton: Display.DefaultButton.Button1 IsTopMost: True ButtonPressed=> ButtonPressed
ELSE
    Display.ShowMessageDialog.ShowMessage Title: $'''メール送信''' Message: $'''社員番号または定型メールが登録されていません。''' Icon: Display.Icon.ErrorIcon Buttons: Display.Buttons.OK DefaultButton: Display.DefaultButton.Button1 IsTopMost: True ButtonPressed=> ButtonPressed
END
```
:::note info
フローコードの「$'''作成したメール送信情報のExcelファイルのパスを指定'''」の部分を「1. Excelにメール送信情報を一覧化する。」で作成したメール送信情報のExcelファイルのパスに書き換えてから使用してください。
:::

</details>

## 参考資料
Power Automate Desktopの使い方をわかりやすく説明しています。参考になるのでぜひ！

https://support.asahi-robo.jp/tutorial/power-automate-desktop

# 実際に使用してもらった感想
「少しでも業務負荷や効率化を図れるよう定型メールの自動化ツールを作成したので実際に使用して感想をきかせてください！」とお願いし以下フィードバックをいただきました。
※事前に作成した目的・機能説明・使い方について説明を実施

## 良かった点
　
・単純につくりあげるのはすごい。（部内チームメンバー Fさん）

・定型文とはいえいちいちどんな内容かは覚えていないから、前回送信したメールを探して、
　メールを送信しているから。その面倒くささが解消されそう。
　（部内チームメンバー Fさん）

・連絡しなければいけないことがもれない。（部内チームメンバー Sさん）

## 悪かった点・改善点

・本文の内容を少し変えてだせるようになるとさらに良いかも（部内チームメンバー Fさん）

・定型メールを出すタイミングがその他ツールのステータスで判断しているので
　連携できるとさらに楽かも。（部内チームメンバー Fさん）

・複数の定型メールをまとめてだせるともっといいかも（部内チームメンバー Sさん）

## フィードバックを受けて
簡単な使い方の説明のみでしたが、使い方に対する意見はなかったので、そこは良かったのかなと。悪かった点・改善点では、もう少し拡張するとさらに良いといった意見だったので、もう少しアッデートすることで利用用途が増え、さらに**業務改善向上につながる**と感じました。
　
「こういった業務も自動化できたらよいのにな」と、他にもいくつか業務改善案をいただくこともできたので新たにツールを作成してみたいと思います。また、そういった意見をいただけたことから、少しは**自動化に興味を持っていただけた**感じだったので（思っているだけ？ｗ）、チーム内で業務改善ツールを作成し、部署内に発信できるようになるとよいなと感じました。

# 作成してみた感想
「Power Automate Desktop」ですが、やりたいことを組み合わせることで１つのツールが作成できるのでパズルをやっている感じ？で楽しくできました。また、UIや使い勝手がよく初心者の私でも時間を掛けづに作成できました。
これから「自動化ツールをを使って業務改善してみたい！」といった方にはお勧めのツールだと思います。また、「Power Automate Desktop」以外のツールで自動化ツールの作成を断念したことがあるという方も、ぜひ試しに使ってみはいかがでしょうか？

# memo
・Power Automate Desktop 使用時にたまにフリーズすることがあった。
　フロー作成画面は少し重い感じがしました。

・[メッセージ] - [カスタム フォームを表示]がアクション追加後のフォームデザイン時
　エラーが発生し使用できなかった。（原因調査中）