【Power Automate×Outlook】文字の切り取り編

最近は昔作ったTRPG風のアナログゲームを、ChatGPTを交えて改造しています。
お久しぶりです、メディア制作課の八咫です。
今回はPower Automateを用いて、Outlookのメールから「必要な文字の抽出」に挑戦します。
Power Automateって何?という方は、過去の記事に記載がありますので、そちらをご覧下さい。
こんな人にオススメ
- 「Webサイトのお問い合わせフォームから送信された内容を、いちいちメールで確認するのが手間…」
- 「特定のキーワード(例:会社名、注文番号)だけを抜き出して、必要な人に通知したい」
流れ
今回はこの3ステップの流れでいきます。
Step.1
条件に当てはまるメールを決める。
今回は「自社Webサイトからきたお問い合わせ」のメールをターゲットにします。
Step.2
本記事のメインです。
Power Automate (Web版)を用いて、メールの内容から欲しい情報を抽出します。
Step.3
ExcelやTeams、Outlookなど(今回はTeams)、任意の場所へ情報を送ります。

Step.1 Outlookの設定
まずはこの文字抽出したいメールだけが届く場所が必要です。
下はOutlook(Web版)のナビゲーションで、「ルール」を設定する事で、必要なメールを絞り込みます。

文字抽出したいメールを選択した状態で、 「ルール」 を押して下さい。

「フォルダーを選択」を押すと、下図の様に「フォルダーの新規作成」が現れます。


フォルダーの名前を付けてOKを押すと、ルールが作成されます。
今回作成されたルールは受信したメールが設定した差出人(メールアドレス)の場合、作成したメールフォルダー(練習)へ移動するというものです。
異なるルールを作成する事もできますが、本筋から離れて長くなってしまいますので、興味がある人は調べて見て下さい。
これで、抽出したいメールだけを受け取るメールフォルダー「練習」を設定する事ができました。
Step.2 PowerAutomateの設定
Step.2ではPowerAutomateの設定をしていきます。
まずはPowerAutomateのWeb版にアクセスしましょう。

左ナビゲーションの中から「+作成」を押します。

今回はメールが届いた時に動いてほしいので、「自動化したクラウドフロー」を選択します。

①フロー名をきめます。後から見てわかる名前が良いでしょう。
②今回は届いたメールを取得したいので、フローのトリガーは「outlook」で検索します。
③「新しいメールが届いたとき」を選択し、「作成」を押します。
Gmailでも可能ですが、あまりおすすめしません。
理由としてOutlookは「届いた時に処理を実行する」事が可能ですが、Gmailはメールが届いた事を検知できない為です。
代わりに、「◯分おきにGmailのメールフォルダを覗きにいく」という処理になります。
PowerAutomateは24時間に命令できる回数が決まっている為、「1分おきにメールフォルダを覗きにいく」などのような短い間隔で設定した場合、 命令回数がすぐなくなってしまうリスクがあります。
作成が成功すると、何もない所に1つだけ、先程作ったトリガーが生成されています。

トリガーを押すと、画面左側に設定の画面が現れます。
ここで、どのような条件のメールが届いた時に、この先の処理を行うのか決めていきます。


今回はStep.1で作成した「練習」フォルダーに届くメールに処理を行いたいので、「詳細パラメーター」は「フォルダー」を選択します。
その後、「練習」フォルダーを選択。これで、「練習フォルダーに届いたメールに対して処理を実行する」という命令ができました。
ここから先は届いたメールをどうしていくか、の処理になります。
本記事では下記メール本文の中からユーザーの名前である「テスト太郎」の文字を抽出する事を目的に進めていきます。
アルタスクールホームページより
下記の通りお問い合わせがありました。
————
お問い合わせ種別:その他のお問い合わせ
お名前:テスト太郎
お電話番号:080-1234-1234
メールアドレス:test-alta@alta.co.jp
学校名:テスト学校
お問い合わせ内容:
練習用のお問い合わせです。
実際のケースで考えてみると、お問い合わせする人間が毎回「テスト太郎」とは限りません。
「テスト次郎」かもしれませんし、「テスト三郎」かもしれません。
なので、本記事のポイントは直接名前を狙うのではなく、変わらない部分に注目する事です。
変わらない部分というのは「お名前:」の事です。
「お名前:」 の後には必ず名前がきます。
それは「テスト太郎」でも「テスト次郎」でも「テスト三郎」でも変わりません。
「お名前:」 から欲しい名前が始まる事がわかりましたが、今度は名前がどこで終わるか、の場所も必要です。
それが「お電話番号:」です。
つまり、今回のメール本文において、 「名前」は必ず 「 お名前:」と「お電話番号:」 の間にあるという事です。
今から挑戦するみなさんの場合は、このメール本文とは違う形だと思いますので、必ず変わらない場所を探して下さい。
プログラムで出力しているお問い合わせメールである以上、毎回一定のルールに基づいてメールが送信されているはずです。
ルールが存在しないメール、例えばお客様からの直メールなどの場合は、この方法は残念ながら使えません。
完成イメージ
PowerAutomateに処理を追加する前に、全体イメージを掴みましょう。
右が完成図、後6個処理を書けば完成です。
右図だけでは何がなんだかわからないと思うので、1つ1つの処理を日本語にしてみましょう。
そうすれば、そんなに難しくないことがわかります。
①Html からテキスト
これは届いたメールの本文がただのテキストの状態ではないので、普通のテキストに変換しています。
②「お名前:」を探す
先ほどの「お名前:」が始まる文字数を探します。
ちなみにサンプルのメール文だと、68番目です。
③開始位置の調整
実は先程の68番目というのは「お名前:」の「お」が始まる文字数です。欲しい文字は名前の「テスト太郎」なので、「お」「名」「前」「:」の4文字分、後ろにずらさなければいけません。なので、68+4をしています。つまり、72ですね。
④「お電話番号:」を探す
「お電話番号:」 が始まる文字数を探しています。
ちなみにサンプルのメール文だと、78番目です。
⑤ 名前情報の取得
③と④の情報を使って、いよいよ 「テスト太郎」 の文字を回収します。
72文字目から78文字目までの文字を抽出しています。
「テスト太郎」 は5文字だから77文字では?という疑問もあるかと思いますが、おそらく改行も1文字に含まれているのだと思います。
厳密にしたければ終了位置も調整が可能です。
⑥チャットまたはチャネルでメッセージを投稿する
最後に、Teamsに抽出したメッセージを投稿しています。

処理の追加
では、一緒に6個の処理を記載してみましょう。
一番最初に設定したのが「トリガー」、その後に追加されていくのが「アクション」という名称です。
最初のアクションを追加してみましょう。トリガーの下にある「+」からアクションを追加。

アクションはたくさんあるので、検索して絞り込むのがオススメです。
一番最初は「Html からテキスト」なので、「html」と検索すれば見つけられるはずです。

生成されたアクションをクリックしてみましょう。

やりたい事は「メールの本文を普通のテキストに変換する」事なので、この中にはメール本文を入れます。

入力する場所を押すと青い枠に囲まれ、右上に「⚡️」と「fx」が現れます。
どちらも本記事で使用しますが、ここでは「⚡️」だけ先に説明していきます。
「⚡️」は動的な値と呼ばれています。
トリガーやアクションで発生した値を使う事ができます。
見たほうがわかりやすいので、試しに「⚡️」を押してみましょう。

今回のトリガーは「新しいメールが届いた時」の為、メールに関する値を取得できます。
「差出人」や「宛先」、「件名」など、見覚えのある単語が並んでいると思います。
今回は「メールの本文を普通のテキストに変換する」事が目的なので、欲しいのは「本文」です。

入力する場所に「本文」と入っていれば成功です。
テキストで「本文」と入力しても意味がないので、注意して下さい。
1個目はこれで終わりです。
2個目は「「お名前:」を探す」です。
アクションを追加していきましょう。

文字を探すので、「テキスト」と検索しましょう。

「テキストの位置の検索」を使います。
アクションを押すと、今度は2つの入力が必要です。
「テキスト」と「検索するテキスト」です。

「テキスト」に入れるのは①で作った「Html からテキスト」(メール本文をテキストに直したもの)の値を使います。

「検索するテキスト」 に入れる値は「お名前:」を探したいので、そのまま「お名前:」と入力します。
※これは「⚡️」の値ではなく、普通のテキストです。
ちょっとした事で検索がうまくいかないケースがよくあります。
例えば、半角スペース「 」の有無や、全角の「:」か半角の「:」かが違うなどです。
このような事故を防ぐ為に、元のメール文からコピーしてくる事をオススメします。
下記のようになっていれば大丈夫です。

3個目は 「開始位置の調整」です。
これまで同様、アクションを追加していきます。
今回は自由に記述ができる「作成」を使います。
検索に「作成」と入れれば見つける事ができます。

ここでの目的は 「お」「名」「前」「:」の4文字分、後ろにずらす事です。
68+4、これをやります。
足し算をする為に「fx」を使います。

「fx」を押すと、このような画面になります。
検索の場所に「add」と入力して下さい。

数学関数の「add」関数を押します。
押すと、上の入力する画面に「add()」が現れます。
add(68,4)とすれば完成!と言いたい所ですが、この68という数字も変わる可能性があります。
なので、68の部分は2個目で作った値にする必要があります。

この部分を切り替えます。
検索した時の「add」が残っていたら、それも消します。
そうすると、「⚡️」を押した時と同じ動的な値が呼べるようになります。
2個目で作った値 、 「「お名前:」を探す」の値を入れます。

add(body('「お名前:」を探す’),4)
こうなっていれば、ばっちりです。
いよいよ折り返し、4個目です。
4個目は2個目の 「「お名前:」を探す」 とほぼ同じです。
アクションを追加、 「テキストの位置の検索」 を使用します。

「お名前:」が「お電話番号:」 に変わっているだけです。
今回の実数値でいえば、78です。
5個目は今までの処理の総仕上げです。
アクションを追加して、「テキスト」と検索。

「部分文字列」のアクションを使います。
「部分文字列」アクションの中身は下記のようになっています。

テキスト:探したいテキストがある原文。今回は ①Html からテキストを使います。
開始位置:探したい文字が始まる位置(何文字目?)。今回は ③開始位置の調整を使います。
詳細パラメーター:何も入力しなくても動きますが、より細かい設定をしたい時に使います。今回は終わりの文字数も用意してきたので、「長さ」を選択します。
長さにそのまま ④「お電話番号:」を探す を入れてしまうと、78文字になってしまいます。
「メール文の72文字目から始めて、78文字分取得」 となってしまうので取りすぎです。
78-72、これをやります。
先程は足し算の関数「add」を使いましたが、今度は引き算の関数「sub」を使います。

数学関数の「sub」を押します。
今回はどちらも動的な値、 ④「お電話番号:」を探す と ③開始位置の調整 を使います。
前回同様自分で入力する必要はなく、動的な値を押せば自動で入力されます。

sub(body('「お電話番号:」を探す’), outputs('開始位置の調整’))
これで完成です。

いよいよ最後の6個目です。
ここは今まで作ってきたデータをどこに送るのか、という処理なので、Teamsである必要はありません。
今回はTeamsで作成しますが、慣れてきたら違うものにも挑戦してみて下さい。
アクションを追加して、「teams」で検索。

表示されている候補の中に欲しいアクションがないので、「表示を増やす」を押します。

たくさんの候補が出てきました。
この中で、「チャットまたはチャネルでメッセージを投稿する」を選びます。

アクションの中身は「投稿者」と「投稿先」です。
「投稿者」は誰がメッセージを投稿した事にするのか、です。
初期値のフローボットは誰でもない、システムとしての投稿。
Power Virtual Agentsは投稿者を自分で作れるのですが、本筋から離れるので省略します。
ユーザーは自分自身を指します。
今回は初期値のままでいいでしょう。
投稿先は「グループチャット」、「チャネル」、「フローボットとチャットをする」が選べます。
「グループチャット」か「チャネル」、送りたい所を選びましょう。
ただ、成功するかどうかを確認できるまでは、こっそり確認できる場所を用意した方がいいかもしれません。
今回は 「グループチャット」 の「メモ」という場所に送ります。

後は内容を好きにデコレーションして送るだけです。

名前の所は動的な値にする事をお忘れなく。
これで全ての工程は完了です。
動作確認
これで設定が終わったわけですが、正しく動くのか確認する事が重要です。
実際に指定のメールボックスに届くようにメールを送信して下さい。
メールを送信後、Teamsにチャットが送られていれば成功です。

うまくいかない場合は、もう一度フローを確認します。
編集画面から1つ戻ると、そのフローの実行履歴が見れます。
成功しても失敗しても、実行さえしていればここに記録が残ります。

もし、ここに実行履歴がない場合、そもそもフローが動いていないという事になります。
つまり、トリガーの条件が間違っているか、ユーザーのテストメールがトリガーの発動条件を満たしていないかのどちらかです。
もしここで実行が確認できて、自分の思う動作をしていないなら、フロー内のどこかが間違っています。
・チャットが来ない。
→⑥の設定を見直してみましょう。
・チャットは来るが、名前がうまく取れていない。
→始まりがおかしいなら②③か⑤の「開始位置」どれかが怪しいです。
→終わりがおかしいなら④か⑤の「長さ」どちらかが怪しいです。
このように異常な状態の時も、目星がつけられれば調査する場所を絞る事ができます。
最後に
・欲しいメールだけが届くボックスを用意する(Outlook)
・そのボックスに来たメールを処理するトリガーを作る( PowerAutomate )
・処理したい内容を書く( PowerAutomate )
・動作確認をする(諸々)
いかがでしたでしょうか。
メールの着信をトリガーに自動で動いてくれるPowerAutomateは、使いこなせば色々応用する事ができます。
今回の文字抽出も、名前に限らず電話番号やお問い合わせ内容も同じ書き方で取得する事ができます。
ぜひ自分の業務を振り返ってみて、その一部分をPowerAutomateに預けてみて下さい。
そうすると空いた時間で…、また PowerAutomate を書きたくなります。
では、機会があればまたお会いしましょう。
ここまで読んで下さってありがとうございました。
そんな株式会社アルタがお届けするソリューションが気になる方は…