5
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

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

Last updated at Posted at 2023-01-21

はじめに

2023/01/22 コード真面目に書きました!

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

  • Outlook
    image.png
  • Gmail
    image.png

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

  • 気を付けたほうが良い点
    そして
  • 対策

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

警告
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

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


Power Automateで受信したメール文面を取得する方法

Outlook.com コネクタによりメールの内容は

  • 差出人
  • CC
  • 件名
  • 添付ファイル
  • メール文面

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

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

image.png

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

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

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

検証用フロー

image.png

  • 本文の場合
"<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

ゴリゴリの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

ここまで整理すると

メニュー 課題
本文 HTMLで取得される
本文のプレビュー プレーンテキストで取得されるが、見切れる

上記のような課題があります。


対策

アクションで対処する

Html からテキスト Content Conversion

このときに良さそうなコネクタとアクションがありそうです。
Content ConversionコネクタのHtmlからテキストですね。
image.png

なんと便利な・・・。

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

  • 出力される結果
読者様


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


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


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



利用日利用店舗利用額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タグを除去するスクリプトを考えると下記の様になります。

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

image.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>タグは個別の対処が必要ということになります・・。
うーん、コードが長引きそうです。

  • 参考

再チャレンジ

このままでは消化不良なので書いてみました!
これで上手く行きそうです!

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でテーブル対処するコードを書くのは一旦はやめておきますが、
書く必要性がどうしても生まれたら追記したいと思います。

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

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

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

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

5
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?