Power AutomateでHTMLメールからプレーンテキストへ変換する方法を探る

# はじめに
***2023/01/22 コード真面目に書きました！***

Power Automateの、**自動化したクラウドフロー**の中で、
**新しいメールが届いたとき**をトリガーにして動く
自動化が実現できます。

- **Outlook**
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2734332/8ff5b3a6-f3ee-2a36-5a38-09184ed436d6.png)
- **Gmail**
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2734332/f1fd36a1-2bbb-970e-ff13-d9bb2e5bc45c.png)

メールというデータから情報を抜き出し、活用する方法を先日記事で紹介させていただきましたが、
受信したメールテキストを活用するうえで
 - 気を付けたほうが良い点
そして
 - 対策

https://qiita.com/DEmodoriGatsuO/items/828dec69a24b25b60a00

この二点を検証してみましたので、記事にします。

:::note warn
警告
2023.01.21時点の検証情報です。
:::

# 検証方法
下記の様なメールが送られることを想定した文面です。

### メール - 全く存在しないであろう内容です
***
 - Subject: *【Ga・GatsuoのQiita】Power Automateのメール取得を攻略する*

[ Body ]

読者様

お世話になります。出戻りガツオです。

最近はお変わりございませんでしょうか？
季節の変わり目ですので、お体に十分お気を付けください。

さて、本日は下記の未請求分の取引について早急に振込をお願いしたく存じます。
|利用日|利用店舗|利用額
|---|---|---
|2023/1/1|パチ屋のカツオ|200,000
|2023/1/4|DDoS攻撃講座　鰹|10,000,000
|2023/1/7|鰹塾 振込手数料|5,000
|2023/1/10|鰹塾 月謝|10,000
|2023/1/13|生命保険料 代理支払い分|6,000
|2023/1/16|リボ払い 代理支払い分|10,254
|2023/1/19|鰹や 飲食費|50,000
|**集計**||**10,281,254** 

**振込期限**
2023/01/21 12:00

**振込口座**
カツオ銀行　土佐支店　9784 123 1112222

ご確認ください。
***
### Gmailから発信されるイメージ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2734332/bb4ec925-429d-356c-ec96-11383fb9a673.png)

:::note info
上記はあくまで架空の内容です
:::

***

# Power Automateで受信したメール文面を取得する方法
Outlook.com コネクタによりメールの内容は
 - 差出人
 - CC
 - 件名
 - 添付ファイル
 - メール文面

様々なデータを取得することができます。
詳しくはlearnをご参照ください。

https://learn.microsoft.com/ja-jp/connectors/office365/

さて、この中で **『メール文面を取得するアクション』** がどれか
調べてみると下記の通りとなります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2734332/e4fd91a5-693f-90eb-fcb3-ac17dbb5a1b2.png)

- 本文
- 本文のプレビュー

上記の二つが挙げられます。

実際にメールを送り、受け取った値を見てみましょう。

### 検証用フロー
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2734332/356ac1cc-af46-255b-00c5-20b555459d0b.png)

 - `本文の場合`
```html
"<html><head>\r\n<meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\"></head><body><div dir=\"ltr\">読者様<div><br></div><div>お世話になります。</div><div>出戻りガツオです。</div><div><br></div><div>最近はお変わりございませんでしょうか？</div><div>季節の変わり目ですので、お体に十分お気を付けください。</div><div><br></div><div>さて、本日は下記の未請求分の取引について</div><div>早急に振込をお願いしたく存じます。</div><div><br></div><div><table border=\"0\" cellpadding=\"0\" cellspacing=\"0\" width=\"424\" style=\"border-collapse:collapse; width:318pt\"><colgroup><col width=\"115\" style=\"width:86pt\"><col width=\"214\" style=\"width:161pt\"><col width=\"95\" style=\"width:71pt\"></colgroup><tbody><tr height=\"25\" style=\"height:18.75pt\"><td height=\"25\" width=\"115\" style=\"height:18.75pt; width:86pt; font-size:11pt; color:white; font-weight:700; font-family:游ゴシック,monospace; border-top:0.5pt solid rgb(142,169,219); border-right:none; border-bottom:0.5pt solid rgb(142,169,219); border-left:0.5pt solid rgb(142,169,219); background:rgb(68,114,196); padding:0px; vertical-align:middle; white-space:nowrap\">利用日</td><td width=\"214\" style=\"width:161pt; font-size:11pt; color:white; font-weight:700; font-family:游ゴシック,monospace; border-top:0.5pt solid rgb(142,169,219); border-right:none; border-bottom:0.5pt solid rgb(142,169,219); border-left:none; background:rgb(68,114,196); padding:0px; vertical-align:middle; white-space:nowrap\">利用店舗</td><td width=\"95\" style=\"width:71pt; font-size:11pt; color:white; font-weight:700; font-family:游ゴシック,monospace; border-top:0.5pt solid rgb(142,169,219); border-right:0.5pt solid rgb(142,169,219); border-bottom:0.5pt solid rgb(142,169,219); border-left:none; background:rgb(68,114,196); padding:0px; vertical-align:middle; white-space:nowrap\">利用額</td></tr><tr height=\"25\" style=\"height:18.75pt\"><td height=\"25\" style=\"height:18.75pt; font-size:11pt; color:black; font-family:游ゴシック,sans-serif; border-top:0.5pt solid rgb(142,169,219); border-right:none; border-bottom:0.5pt solid rgb(142,169,219); border-left:0.5pt solid rgb(142,169,219); background:rgb(217,225,242); padding:0px; vertical-align:middle; white-space:nowrap\">2023/1/1</td><td style=\"font-size:11pt; color:black; font-family:游ゴシック,sans-serif; border-top:0.5pt solid rgb(142,169,219); border-right:none; border-bottom:0.5pt solid rgb(142,169,219); border-left:none; background:rgb(217,225,242); padding:0px; vertical-align:middle; white-space:nowrap\">パチ屋のカツオ</td><td style=\"font-size:11pt; color:black; font-family:游ゴシック,sans-serif; border-top:0.5pt solid rgb(142,169,219); border-right:0.5pt solid rgb(142,169,219); border-bottom:0.5pt solid rgb(142,169,219); border-left:none; background:rgb(217,225,242); padding:0px; vertical-align:middle; white-space:nowrap\">200,000</td></tr><tr height=\"25\" style=\"height:18.75pt\"><td height=\"25\" style=\"height:18.75pt; font-size:11pt; color:black; font-family:游ゴシック,sans-serif; border-top:0.5pt solid rgb(142,169,219); border-right:none; border-bottom:0.5pt solid rgb(142,169,219); border-left:0.5pt solid rgb(142,169,219); padding:0px; vertical-align:middle; white-space:nowrap\">2023/1/4</td><td style=\"font-size:11pt; color:black; font-family:游ゴシック,sans-serif; border-top:0.5pt solid rgb(142,169,219); border-right:none; border-bottom:0.5pt solid rgb(142,169,219); border-left:none; padding:0px; vertical-align:middle; white-space:nowrap\">DDoS攻撃講座　鰹</td><td style=\"font-size:11pt; color:black; font-family:游ゴシック,sans-serif; border-top:0.5pt solid rgb(142,169,219); border-right:0.5pt solid rgb(142,169,219); border-bottom:0.5pt solid rgb(142,169,219); border-left:none; padding:0px; vertical-align:middle; white-space:nowrap\">10,000,000</td></tr><tr height=\"25\" style=\"height:18.75pt\"><td height=\"25\" style=\"height:18.75pt; font-size:11pt; color:black; font-family:游ゴシック,sans-serif; border-top:0.5pt solid rgb(142,169,219); border-right:none; border-bottom:0.5pt solid rgb(142,169,219); border-left:0.5pt solid rgb(142,169,219); background:rgb(217,225,242); padding:0px; vertical-align:middle; white-space:nowrap\">2023/1/7</td><td style=\"font-size:11pt; color:black; font-family:游ゴシック,sans-serif; border-top:0.5pt solid rgb(142,169,219); border-right:none; border-bottom:0.5pt solid rgb(142,169,219); border-left:none; background:rgb(217,225,242); padding:0px; vertical-align:middle; white-space:nowrap\">鰹塾 振込手数料</td><td style=\"font-size:11pt; color:black; font-family:游ゴシック,sans-serif; border-top:0.5pt solid rgb(142,169,219); border-right:0.5pt solid rgb(142,169,219); border-bottom:0.5pt solid rgb(142,169,219); border-left:none; background:rgb(217,225,242); padding:0px; vertical-align:middle; white-space:nowrap\">5,000</td></tr><tr height=\"25\" style=\"height:18.75pt\"><td height=\"25\" style=\"height:18.75pt; font-size:11pt; color:black; font-family:游ゴシック,sans-serif; border-top:0.5pt solid rgb(142,169,219); border-right:none; border-bottom:0.5pt solid rgb(142,169,219); border-left:0.5pt solid rgb(142,169,219); padding:0px; vertical-align:middle; white-space:nowrap\">2023/1/10</td><td style=\"font-size:11pt; color:black; font-family:游ゴシック,sans-serif; border-top:0.5pt solid rgb(142,169,219); border-right:none; border-bottom:0.5pt solid rgb(142,169,219); border-left:none; padding:0px; vertical-align:middle; white-space:nowrap\">鰹塾 月謝</td><td style=\"font-size:11pt; color:black; font-family:游ゴシック,sans-serif; border-top:0.5pt solid rgb(142,169,219); border-right:0.5pt solid rgb(142,169,219); border-bottom:0.5pt solid rgb(142,169,219); border-left:none; padding:0px; vertical-align:middle; white-space:nowrap\">10,000</td></tr><tr height=\"25\" style=\"height:18.75pt\"><td height=\"25\" style=\"height:18.75pt; font-size:11pt; color:black; font-family:游ゴシック,sans-serif; border-top:0.5pt solid rgb(142,169,219); border-right:none; border-bottom:0.5pt solid rgb(142,169,219); border-left:0.5pt solid rgb(142,169,219); background:rgb(217,225,242); padding:0px; vertical-align:middle; white-space:nowrap\">2023/1/13</td><td style=\"font-size:11pt; color:black; font-family:游ゴシック,sans-serif; border-top:0.5pt solid rgb(142,169,219); border-right:none; border-bottom:0.5pt solid rgb(142,169,219); border-left:none; background:rgb(217,225,242); padding:0px; vertical-align:middle; white-space:nowrap\">生命保険料 代理支払い分</td><td style=\"font-size:11pt; color:black; font-family:游ゴシック,sans-serif; border-top:0.5pt solid rgb(142,169,219); border-right:0.5pt solid rgb(142,169,219); border-bottom:0.5pt solid rgb(142,169,219); border-left:none; background:rgb(217,225,242); padding:0px; vertical-align:middle; white-space:nowrap\">6,000</td></tr><tr height=\"25\" style=\"height:18.75pt\"><td height=\"25\" style=\"height:18.75pt; font-size:11pt; color:black; font-family:游ゴシック,sans-serif; border-top:0.5pt solid rgb(142,169,219); border-right:none; border-bottom:0.5pt solid rgb(142,169,219); border-left:0.5pt solid rgb(142,169,219); padding:0px; vertical-align:middle; white-space:nowrap\">2023/1/16</td><td style=\"font-size:11pt; color:black; font-family:游ゴシック,sans-serif; border-top:0.5pt solid rgb(142,169,219); border-right:none; border-bottom:0.5pt solid rgb(142,169,219); border-left:none; padding:0px; vertical-align:middle; white-space:nowrap\">リボ払い 代理支払い分</td><td style=\"font-size:11pt; color:black; font-family:游ゴシック,sans-serif; border-top:0.5pt solid rgb(142,169,219); border-right:0.5pt solid rgb(142,169,219); border-bottom:0.5pt solid rgb(142,169,219); border-left:none; padding:0px; vertical-align:middle; white-space:nowrap\">10,254</td></tr><tr height=\"25\" style=\"height:18.75pt\"><td height=\"25\" style=\"height:18.75pt; font-size:11pt; color:black; font-family:游ゴシック,sans-serif; border-top:0.5pt solid rgb(142,169,219); border-right:none; border-bottom:0.5pt solid rgb(142,169,219); border-left:0.5pt solid rgb(142,169,219); background:rgb(217,225,242); padding:0px; vertical-align:middle; white-space:nowrap\">2023/1/19</td><td style=\"font-size:11pt; color:black; font-family:游ゴシック,sans-serif; border-top:0.5pt solid rgb(142,169,219); border-right:none; border-bottom:0.5pt solid rgb(142,169,219); border-left:none; background:rgb(217,225,242); padding:0px; vertical-align:middle; white-space:nowrap\">鰹や 飲食費</td><td style=\"font-size:11pt; color:black; font-family:游ゴシック,sans-serif; border-top:0.5pt solid rgb(142,169,219); border-right:0.5pt solid rgb(142,169,219); border-bottom:0.5pt solid rgb(142,169,219); border-left:none; background:rgb(217,225,242); padding:0px; vertical-align:middle; white-space:nowrap\">50,000</td></tr><tr height=\"25\" style=\"height:18.75pt\"><td height=\"25\" style=\"height:18.75pt; font-size:11pt; color:black; font-weight:700; font-family:游ゴシック,sans-serif; border-top:2pt double rgb(68,114,196); border-right:none; border-bottom:0.5pt solid rgb(142,169,219); border-left:0.5pt solid rgb(142,169,219); padding:0px; vertical-align:middle; white-space:nowrap\">集計</td><td style=\"font-size:11pt; color:black; font-weight:700; font-family:游ゴシック,sans-serif; border-top:2pt double rgb(68,114,196); border-right:none; border-bottom:0.5pt solid rgb(142,169,219); border-left:none; padding:0px; vertical-align:middle; white-space:nowrap\"></td><td align=\"right\" style=\"font-size:11pt; color:black; font-weight:700; font-family:游ゴシック,sans-serif; border-top:2pt double rgb(68,114,196); border-right:0.5pt solid rgb(142,169,219); border-bottom:0.5pt solid rgb(142,169,219); border-left:none; padding:0px; vertical-align:middle; white-space:nowrap\">10,281,254</td></tr></tbody></table><br></div><div><b>振込期限</b></div><div>2023/01/21 12:00</div><div><br></div><div><b>振込口座</b></div><div>カツオ銀行　土佐支店　9784 123 1112222</div><div><br></div><div>ご確認ください。</div></div></body></html>"
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2734332/da40aaa8-65d0-1dae-6864-ccf53ae55cbb.png)

ゴリゴリのHTMLですね。ちなみに受信したメールは
通常暗号化されていて、OutlookやGmailの画面で
整ったHTMLでの状態で見れないので、複合化されているという点はありがたいです。

 - `本文のプレビュー`の場合
```
読者様

お世話になります。
出戻りガツオです。

最近はお変わりございませんでしょうか？
季節の変わり目ですので、お体に十分お気を付けください。

さて、本日は下記の未請求分の取引について
早急に振込をお願いしたく存じます。

利用日     利用店舗    利用額
2023/1/1        パチ屋のカツオ 200,000
2023/1/4        DDoS攻撃講座　鰹      10,000,000
2023/1/7        鰹塾 振込手数料       
```

おや？見切れてしまっていますね。
```
"読者様\r\n\r\nお世話になります。\r\n出戻りガツオです。\r\n\r\n最近はお変わりございませんでしょうか？\r\n季節の変わり目ですので、お体に十分お気を付けください。\r\n\r\nさて、本日は下記の未請求分の取引について\r\n早急に振込をお願いしたく存じます。\r\n\r\n利用日     利用店舗    利用額\r\n2023/1/1        パチ屋のカツオ 200,000\r\n2023/1/4        DDoS攻撃講座　鰹      10,000,000\r\n2023/1/7        鰹塾 振込手数料       "
```

プレーンテキストではありますが、残念ながら見切れてしまうという状況になりました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2734332/c97948d4-4611-e978-539f-057152139d1a.png)

ここまで整理すると
|メニュー|課題
|---|---
|本文|HTMLで取得される
|本文のプレビュー|プレーンテキストで取得されるが、見切れる

上記のような課題があります。
***
# 対策
## アクションで対処する
### Html からテキスト Content Conversion
このときに良さそうなコネクタとアクションがありそうです。
`Content Conversion`コネクタの`Htmlからテキスト`ですね。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2734332/47e5ab6a-3239-b63e-1c6b-14786c4f7406.png)

https://learn.microsoft.com/ja-jp/connectors/conversionservice/#html-to-text

なんと便利な・・・。

これで検証するとどうなるでしょうか。

 - 出力される結果
```
読者様


お世話になります。
出戻りガツオです。


最近はお変わりございませんでしょうか？
季節の変わり目ですので、お体に十分お気を付けください。


さて、本日は下記の未請求分の取引について
早急に振込をお願いしたく存じます。



利用日利用店舗利用額2023/1/1パチ屋のカツオ200,0002023/1/4DDoS攻撃講座　鰹10,000,0002023/1/7鰹塾
振込手数料5,0002023/1/10鰹塾 月謝10,0002023/1/13生命保険料 代理支払い分6,0002023/1/16リボ払い
代理支払い分10,2542023/1/19鰹や 飲食費50,000集計10,281,254


振込期限
2023/01/21 12:00


振込口座
カツオ銀行　土佐支店　9784 123 1112222


ご確認ください。
```
 - 詳細
```
読者様\n\n\nお世話になります。\n出戻りガツオです。\n\n\n最近はお変わりございませんでしょうか？\n季節の変わり目ですので、お体に十分お気を付けください。\n\n\nさて、本日は下記の未請求分の取引について\n早急に振込をお願いしたく存じます。\n\n\n\n利用日利用店舗利用額2023/1/1パチ屋のカツオ200,0002023/1/4DDoS攻撃講座　鰹10,000,0002023/1/7鰹塾\n振込手数料5,0002023/1/10鰹塾 月謝10,0002023/1/13生命保険料 代理支払い分6,0002023/1/16リボ払い\n代理支払い分10,2542023/1/19鰹や 飲食費50,000集計10,281,254\n\n\n振込期限\n2023/01/21 12:00\n\n\n振込口座\nカツオ銀行　土佐支店　9784 123 1112222\n\n\nご確認ください。
```

確かに変換されていますが、`テーブル`タグ関係がイマイチですね。

## Office Scriptで対処は・・？
`HTMLタグ`を除去するスクリプトを考えると下記の様になります。

```typescript:convertPlain.ts
function main(workbook: ExcelScript.Workbook, text: string) {
  return text.replace(/<("[^"]*"|'[^']*'|[^'">])*>/g, '');
}
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2734332/4607a0c8-fb0d-df18-4b04-68c8685211d6.png)

しかしこのスクリプトの戻り値は下記の通りに・・。

```
"\r\n読者様お世話になります。出戻りガツオです。最近はお変わりございませんでしょうか？季節の変わり目ですので、お体に十分お気を付けください。さて、本日は下記の未請求分の取引について早急に振込をお願いしたく存じます。利用日利用店舗利用額2023/1/1パチ屋のカツオ200,0002023/1/4DDoS攻撃講座　鰹10,000,0002023/1/7鰹塾 振込手数料5,0002023/1/10鰹塾 月謝10,0002023/1/13生命保険料 代理支払い分6,0002023/1/16リボ払い 代理支払い分10,2542023/1/19鰹や 飲食費50,000集計10,281,254振込期限2023/01/21 12:00振込口座カツオ銀行　土佐支店　9784 123 1112222ご確認ください。"
```

**まあ、タグを消去しているだけなので当たり前ですね！(笑)**

つまり`<td><tc><th>`タグは個別の対処が必要ということになります・・。
うーん、コードが長引きそうです。

 - 参考

https://auto-worker.com/blog/?p=7065

### ***再チャレンジ***
このままでは消化不良なので書いてみました！
これで上手く行きそうです！

```typescript
function main(workbook: ExcelScript.Workbook, text: string) {
  // <head>~</head> delete
  let str: string = text.replace(/<head>(.*?)<\/head>/, "");
  //　改行コードを整理 \n
  str = str.replace(/<\/div><div><br>|<br>|<\/div>|<\/tr>/g, "\n");
  //　テーブルのセル区切りをタブ文字に \t
  str = str.replace(/<\/td>/g, "\t");
  // HTMLタグしょうきょ
  str = str.replace(/<("[^"]*"|'[^']*'|[^'">])*>/g, '');
  //　return
  return str.trim();
}
```

 - 出力
```
読者様

お世話になります。
出戻りガツオです。

最近はお変わりございませんでしょうか？
季節の変わり目ですので、お体に十分お気を付けください。

さて、本日は下記の未請求分の取引について
早急に振込をお願いしたく存じます。

利用日	利用店舗	利用額	
2023/1/1	パチ屋のカツオ	200,000	
2023/1/4	DDoS攻撃講座　鰹	10,000,000	
2023/1/7	鰹塾 振込手数料	5,000	
2023/1/10	鰹塾 月謝	10,000	
2023/1/13	生命保険料 代理支払い分	6,000	
2023/1/16	リボ払い 代理支払い分	10,254	
2023/1/19	鰹や 飲食費	50,000	
集計		10,281,254	


振込期限
2023/01/21 12:00

振込口座
カツオ銀行　土佐支店　9784 123 1112222

ご確認ください。
```

```
"読者様\n\nお世話になります。\n出戻りガツオです。\n\n最近はお変わりございませんでしょうか？\n季節の変わり目ですので、お体に十分お気を付けください。\n\nさて、本日は下記の未請求分の取引について\n早急に振込をお願いしたく存じます。\n\n利用日\t利用店舗\t利用額\t\n2023/1/1\tパチ屋のカツオ\t200,000\t\n2023/1/4\tDDoS攻撃講座　鰹\t10,000,000\t\n2023/1/7\t鰹塾 振込手数料\t5,000\t\n2023/1/10\t鰹塾 月謝\t10,000\t\n2023/1/13\t生命保険料 代理支払い分\t6,000\t\n2023/1/16\tリボ払い 代理支払い分\t10,254\t\n2023/1/19\t鰹や 飲食費\t50,000\t\n集計\t\t10,281,254\t\n\n\n振込期限\n2023/01/21 12:00\n\n振込口座\nカツオ銀行　土佐支店　9784 123 1112222\n\nご確認ください。"
```

先日は最後まで粘らず、失礼しました！


# 最後に
今回は、`受信したメール`の文面[ body ]を使うことについて深堀してみました。
Office Scriptでテーブル対処するコードを書くのは一旦はやめておきますが、
書く必要性がどうしても生まれたら追記したいと思います。

自社システムのデータ連携で`メール`が関係する場合は、
**転記作業から解放できる良い手段ですのでおススメです。**

***メールからスプレッドシートに書き写すというウンザリするような作業はやめましょう。***

ということで検証情報でした。

最後までお読みいただきありがとうございました🙇🙇