【Power Automate】Outlookのメール本文抽出マニュアル

Power Automateでメール文字列を抽出する方法を紹介する記事

※当サイトにはプロモーションが含まれます


Power AutomateでOutlookのトリガーやアクションから「メール本文の全体」を取得するのは簡単です。


例えば「新しいメールが届いたとき」トリガーアクションを作成すると、



後続のアクションで「動的なコンテンツ」としてメール本文が取得できるようになります。



そうして取得したメール本文を「Htmlからテキスト」アクションに入力すればテキスト化されたメール本文が出力できます。



しかし、Outlookのメール本文から任意の文字列を抽出するフローを作成するには、さらにいくつかステップを追加する必要があります。


ここから、エラーにならないための注意点なども含めて順にご紹介していきます。


その1:HTML・プレーンテキストの両形式で処理を分岐させる


いずれかの形式のメールしか取得しないのであれば必要ないのですが、混在する場合は処理を分岐させます。



これは、HTMLメールであれば先述のアクションでテキスト化しますが、元々プレーンテキストのメールを同じように処理してしまうと形が変わってしまい、後続でエラーになる危険があるためです。



具体的には、まず「条件」アクションを追加し、判定欄に動的なコンテンツリストからOutlookトリガーの「HTML」を入れます。



そうして下記のような判定条件にします。



これで「はいの場合」には、HTMLメールということなので「Htmlからテキスト」アクションでテキスト化します。



「いいえの場合」ではプレーンテキストなので、何もせず後続の処理へと進みます。



その2:メール本文の任意文字列を抽出する


いよいよ下拵えしたメール本文から任意の文字列を抽出します。



データ操作の「作成」アクションを追加し、下記の関数を適切な式にして設定することで実現します。

substring関数検索対象文字列の指定開始位置から指定文字数分だけ取得する。
indexOf関数検索対象文字列から検索文字列の開始位置を取得する。
add関数引数同士を足し算する。
sub関数引数同士を引き算する。



※式は、動的なコンテンツの隣の「式」タブに入力します。



例として、現在取得している本文(の要約)を下記とし、会社名である「xxx株式会社」を抽出したいとします。


この場合、例えば下記のように記述できます。(長くなるので、抽出元である本文は「本文」とそのまま記載します。実際は「動的なコンテンツ」より選択してください)

substring(本文,add(indexOf(本文,’会社名’),4),sub(indexOf(本文,’電話番号’),add(indexOf(本文,’会社名’),6)))


これは、「①本文の中から文字列”会社名”の開始位置を検索し、②そこに4を足した位置を文字列抽出の開始位置とし、③文字列”電話番号”の開始位置から’②の位置に2を加えたもの’を差し引いた結果を抽出文字数とする」という処理になっています。



ちなみに③の「2を加える」理由は、2行の改行が間にあるためです。


これが式としてPower Automateに正しく認識されれば、下記のように式が表示されます。


ここで注意しなくてはいけないのは、検索に使用する文字列が本文に複数ある場合です。


具体的にいうと、下記のようになっている場合です。



こういうケースでは、〜番目というところまで指定してあげます。下記の関数を使用します。

nthIndexOf関数検索対象文字列から検索文字列のn番目の開始位置を取得する。



文字列「電話番号」のうち、2つ目の方を関数で使いたいので、下記のように記述します。色を濃くしているのが変更部分です。

substring(本文,add(indexOf(本文,’会社名’),4),sub(nthIndexOf(本文,’電話番号’,2),add(indexOf(本文,’会社名’),6)))


このように関数を駆使することで、本文から任意の文字列を抽出できます。


フローはこれで完成です。全体図は下記のようになります。


以上、最後までお読み頂きありがとうございました。


リモートやフレックスなど快適な働き方に興味のある方は↓の記事もおすすめです。

リモートやフレックスなど快適な働き方にフォーカスした転職サイトとは?